SQL: row_number: 按日期排序 asc 需要空值在最后

SQL: row_number: order by date asc Need Nulls to be Last

由于我的 DBMS 不允许在 order by 子句中使用 'Nulls Last',因此我需要以下方面的帮助。

row_number() over(分区 a.ID 按 a.Date 排序

我需要我的行具有按 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
)