SQL: row_number: упорядочить по дате asc. - PullRequest
0 голосов
/ 28 февраля 2019

Так как моя СУБД не допускает 'Null Last' в предложении order by, мне нужна помощь со следующим:

row_number () over (Разделение по порядку a.ID по a.Date asc

Мне нужно, чтобы в моих строках была последовательность номеров по идентификатору, упорядоченная по возрастанию даты, но в моей последовательности строки с нулевыми датами были бы ПОСЛЕДНИМИ.в моем порядке, однако, мои 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 голосов
/ 28 февраля 2019

На лету обрабатывайте все нулевые значения как максимально возможную дату, используя ISNULL.

row_number() over(Partition by a.ID 
     order by ISNULL(a.Date, CAST('9999/12/31' AS DATETIME)) asc
)
0 голосов
/ 28 февраля 2019

Просто добавьте еще один ключ к 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
                  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...