Получить ближайшую дату в SQL в виде столбца - PullRequest
0 голосов
/ 25 марта 2020

У меня есть требование в SQL, где я должен проверить из списка дат, ближайшую к нему дату. Например: из приведенных ниже данных я должен проверить, если для даты " 2020-03-21" данные:

name   date
abc    2020-03-20
abc    2020-03-21
abc    2020-03-23
def    2020-03-22
def    2020-03-24

ожидается:

name   date        expected
abc    2020-03-20  2020-03-21
abc    2020-03-21  2020-03-21
abc    2020-03-23  2020-03-21
def    2020-03-22  2020-03-22
def    2020-03-24  2020-03-22

На основе более ранних сообщений, используя orderby datediff и rownum, я был в состоянии получить rownum в правильном порядке, но немного застрял, как в том, как получить ближайшую дату на уровне имени.

1 Ответ

3 голосов
/ 25 марта 2020

Для этого можно использовать подзапрос:

select
    t.*,
    (
        select top 1 t1.date 
        from mytable t1 
        where t1.name = t.name
        order by abs(datediff(d, t1.date, '2020-03-21')), t.date
    ) expected
from mytable t

Подзапрос возвращает ближайшую доступную дату для цели (раньше или позже) в строках с одинаковым name. Если есть связи, предпочтительна «ранняя» дата.

...