SQL: row_number: order by date asc 需要空值到最后

Mad*_*lin 3 sql sql-server row-number sql-order-by partition

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

row_number() over(Partition by a.ID order by a.Date asc

我需要我的行有一个按日期升序排列的 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
Run Code Online (Sandbox Code Playgroud)

我想要发生的事情:

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
Run Code Online (Sandbox Code Playgroud)

帮助?谢谢你!

Gor*_*off 5

只需将另一个键添加到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
                  )
Run Code Online (Sandbox Code Playgroud)