SQL:row_number:按日期排序asc需要Null为Last

问题描述 投票:2回答:2

由于我的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

救命?谢谢!

sql sql-server sql-order-by partition row-number
2个回答
3
投票

只需在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
投票

在运行中,使用ISNULL将所有空值视为最大可能日期。

row_number() over(Partition by a.ID 
     order by ISNULL(a.Date, CAST('9999/12/31' AS DATETIME)) asc
)
© www.soinside.com 2019 - 2024. All rights reserved.