SQL:row_number:按日期升序排列as as null

时间:2019-02-28 18:43:30

标签: sql sql-server sql-order-by partition row-number

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

有帮助吗?谢谢!

2 个答案:

答案 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
)