Как я могу получить закрытую дату с сортировкой? - PullRequest
0 голосов
/ 08 января 2020

Я хочу отсортировать таблицу SQL по ближайшей дате с сегодняшнего дня.

Вот пример таблицы.

ID          Name          EVENTDATE (datetime)
1           test          2019-07-01 00:00:00
2           test          2020-03-21 00:00:00
3           test          2024-01-01 00:00:00
4           test1         2016-02-14 00:00:00
5           test2         2017-05-03 00:00:00
6           test3         2014-03-23 00:00:00

Ожидаемая таблица, которую я хочу отсортировать, выглядит следующим образом.

ID          Name          EVENTDATE (datetime)
2           test          2020-03-21 00:00:00
5           test2         2017-05-03 00:00:00
4           test1         2016-02-14 00:00:00
6           test3         2014-03-23 00:00:00

Как вы можете видеть, это выглядит как сортировка по убыванию.

Да, в норме это сортировка по убыванию.

Но, пожалуйста, смотрите вышеупомянутые три строки с одинаковыми Name значение test.

test значение имеет три EVENTDATE с. 2019-07-01 00:00:00, 2020-03-21 00:00:00, 2024-01-01 00:00:00.

В этом случае к ближайшему дню с сегодняшнего дня будет выбрана только одна строка. (2019-07-01 уже пройдено и 2020-03-21 - ближайший день)

Надеюсь, вы понимаете, что я хочу. (извините за мой плохой Энгли sh: D)

Как я могу справиться с этим с SQL?

Спасибо.

1 Ответ

2 голосов
/ 08 января 2020

Вы хотите фильтровать , а также сортировать. Вот один из методов:

select t.*
from (select t.*,
             row_number() over (partition by id order by abs(datediff(day, eventdate, getdate()))) as seqnum
      from t
     ) t
where seqnum = 1
order by t.eventdate desc;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...