由于我的DBMS不允许在order by子句中使用'Nulls Last',因此我需要以下帮助。
row_number()over(由a.Date asc按a.ID顺序分区)
我需要我的行按ID按行按日期升序排序,但是我的序列中的空日期行最后一行。显然,如果我可以在我的命令中说“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
救命?谢谢!
只需在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
)
在运行中,使用ISNULL将所有空值视为最大可能日期。
row_number() over(Partition by a.ID
order by ISNULL(a.Date, CAST('9999/12/31' AS DATETIME)) asc
)