由于我的DBMS在order by子句中不允许“ Nulls Last”,因此我需要以下帮助。
row_number()over(按日期ID升序按ID分区
我需要我的行具有按日期升序排列的ID的行号序列,但空日期行在我的序列中为LAST。显然,如果我能按顺序说“ NULLS LAST”会很棒,但是我的dbms(MSSQL)不允许这样做。
例如,当前正在发生什么:
ID Date ROW_NUMBER
1 NULL 1
1 1/2/17 2
1 1/3/17 3
2 NULL 1
2 2/2/17 2
2 2/3/17 3
2 2/4/17 4
我想发生的事情:
ID Date ROW_NUMBER
1 1/2/17 1
1 1/3/17 2
1 NULL 3
2 2/2/17 1
2 2/3/17 2
2 2/4/17 3
2 NULL 4
有帮助吗?谢谢!
答案 0 :(得分:2)
只需将另一个密钥添加到order by
:
row_number() over (Partition by a.ID
order by (case when a.date is not null then 1 else 2 end),
a.Date asc
)
答案 1 :(得分:1)
即时使用ISNULL将所有空值视为最大可能日期。
row_number() over(Partition by a.ID
order by ISNULL(a.Date, CAST('9999/12/31' AS DATETIME)) asc
)