我想帮助解决这个问题。
OUTPUT 字段是我想要的" ROW_NUM "字段看起来像。
我想尽可能使用 row_num 或 rank_num 和 over partition 。
SELECT
[P_ID] ,
[DATE],
ROW_NUMBER() OVER (PARTITION BY [P_ID] ORDER BY [DATE]) AS ROW_NUM
FROM #TEMP
P_ID DATE ROW_NUM OUTPUT
3385 2012-02-02 1 1
3385 2012-02-03 2 2
3385 2012-09-24 3 1
3385 2012-09-25 4 2
3385 2013-11-12 5 1
3385 2013-11-13 6 2
3385 2013-11-14 7 3
3385 2013-11-15 8 4
3385 2014-09-09 9 1
3385 2014-09-10 10 2
3385 2014-09-11 11 3
3385 2015-11-11 12 1
3385 2015-11-12 13 2
3385 2015-11-13 14 3
5538 2012-02-02 15 1
5538 2013-11-12 16 1
5538 2013-11-13 17 2
答案 0 :(得分:0)
看起来您想要枚举每个pid
的连续日期。您可以通过从日期中减去行号来实现此目的 - 差异对于连续日期是不变的。剩下的就是row_number()
:
select t.*,
row_number() over (partition by pid, grp order by date)
from (select t.*,
dateadd(day,
- row_number() over (partition by pid order by date)
date) as grp
from #temp t
) t;
注意:这是SQL Server语法(看起来像您正在使用的数据库。日期函数因数据库而异。