日期:2014-05-18  浏览次数:20461 次

每个姓名往前推5天,得出自己目前是第几个,这个查询怎么写
下面这个表每个姓名往前推5天,如何得出自己目前是第几个

TB1

姓名 日期
张三 4/1/2012
李四 4/1/2012
张三 4/3/2012
张三 4/2/2012
张三 4/9/2012


如何得出下面的结果


姓名 日期 号码
张三 4/1/2012 1
李四 4/1/2012 1
张三 4/3/2012 3
张三 4/2/2012 2
张三 4/9/2012 1


------解决方案--------------------
with cte
as
(select t.name,t.日期,flag=case when exists(select 1 from test where datediff(dd,日期,t.日期)<=5 and name=t.name and 日期<>t.日期) then 1 else 0 end
from test t 
)

select name,日期,row= row_number () over(partition by name ,flag order by 日期)
from cte