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