DECLARE @t TABLE(ID INT IDENTITY(1,1),uid INT,d DATETIME) INSERT @t SELECT 1,'2008-1-1' UNION ALL SELECT 2,'2008-1-1' UNION ALL SELECT 3,'2008-1-1' UNION ALL SELECT 1,'2008-1-1' UNION ALL SELECT 2,'2008-2-2' UNION ALL SELECT 2,'2008-3-1' UNION ALL SELECT 1,'2008-4-1' UNION ALL SELECT 3,'2008-2-1' UNION ALL SELECT 3,'2008-9-1'--(1)因为数据的问题,所以将你的30次,我改为3次来测试,不想敲那么多数据 --(2)不知道你的连续是什么意思,1,2,3三个月都有购买 ,且加起来超过3, 还是1,2,3三个月只要总超过3 --(3)如果是只要总和超过3SELECT DISTINCT uid FROM @t a WHERE (SELECT COUNT(*) FROM @t WHERE uid=a.uid AND CONVERT(VARCHAR(7),d,120) BETWEEN CONVERT(VARCHAR(7),a.d,120) AND CONVERT(VARCHAR(7),DATEADD(mm,2,a.d),120) )>=3/* 2 结果表明,只有uid=2的人,才在3个月内购买 超过3次。 */--(4) 如果你指的连续,即3个月内,每个月都买 过,且总次数超过3,那么参见下贴,重复的东西我就不写了http://topic.csdn.net/u/20080617/23/808db82e-1cfd-4c11-80e0-b067093e3722.html
例如:
1-3
2-4
3-5
...然后查询购买次数大于30次的人员.
我的意思是拿到'结算日期'就从这个日期开始向前推进3个月,如果在这3个月内达到了30次级是我要的数据
INSERT @t SELECT 1,'2008-1-1'
UNION ALL SELECT 2,'2008-1-1'
UNION ALL SELECT 3,'2008-1-1'
UNION ALL SELECT 1,'2008-1-1'
UNION ALL SELECT 2,'2008-2-2'
UNION ALL SELECT 2,'2008-3-1'
UNION ALL SELECT 1,'2008-4-1'
UNION ALL SELECT 3,'2008-2-1'
UNION ALL SELECT 3,'2008-9-1'--(1)因为数据的问题,所以将你的30次,我改为3次来测试,不想敲那么多数据
--(2)不知道你的连续是什么意思,1,2,3三个月都有购买 ,且加起来超过3, 还是1,2,3三个月只要总超过3
--(3)如果是只要总和超过3SELECT DISTINCT uid FROM @t a WHERE
(SELECT COUNT(*) FROM @t WHERE uid=a.uid AND CONVERT(VARCHAR(7),d,120)
BETWEEN CONVERT(VARCHAR(7),a.d,120) AND CONVERT(VARCHAR(7),DATEADD(mm,2,a.d),120)
)>=3/*
2
结果表明,只有uid=2的人,才在3个月内购买 超过3次。
*/--(4) 如果你指的连续,即3个月内,每个月都买 过,且总次数超过3,那么参见下贴,重复的东西我就不写了http://topic.csdn.net/u/20080617/23/808db82e-1cfd-4c11-80e0-b067093e3722.html
呵呵,谢谢你