Access / SQL: как получить следующую ближайшую дату в запросе Access? - PullRequest
0 голосов
/ 22 января 2019

У меня есть две таблицы, к которым я хотел бы присоединиться и сопоставить дату из таблицы DATE_GAPS с ближайшей следующей датой из таблицы MISSING_DATES.Ниже приведены таблицы:

Таблица MISSING_DATES:

UPC  | Date
-----+----------
1111 | 8/18/2018
1111 | 8/19/2018
1111 | 8/25/2018
1222 | 8/18/2018
1222 | 9/1/2018

Таблица DATE_GAPS:

UPC  | Date
-----+----------
1111 | 8/16/2018
1111 | 8/17/2018
1111 | 8/20/2018
1111 | 8/27/2018
1222 | 8/20/2018
1222 | 9/4/2018

Новая таблица:

UPC  | Date      | Closest Next Date
-----+-----------+------------------
1111 | 8/18/2018 | 8/20/2018
1111 | 8/19/2018 | 8/20/2018
1111 | 8/25/2018 | 8/27/2018
1222 | 8/18/2018 | 8/20/2018
1222 | 9/1/2018  | 9/4/2018

Вот скрипт, который у меня сейчас есть, но он загружается слишком долго:

SELECT MISSING_DATES.UPC
  , MISSING_DATES.DATE
  , (
      SELECT MIN(DATE_GAPS.DATE)
      FROM DATE_GAPS
      INNER JOIN MISSING_DATES
        ON DATE_GAPS.UPC = MISSING_DATES.UPC
      WHERE DATE_GAPS.DATE > MISSING_DATES.DATE
    ) AS [Closest Next Date]
FROM MISSING_DATES
  , DATE_GAPS
ORDER BY MISSING_DATES.DATE
  , MISSING_DATES.UPC;

Я не могу понять, каклибо оптимизировать текущий скрипт, либо переписать, чтобы получить то, что я хочу вывести.

Я также пытался использовать следующий код, который работает, но он дает мне ближайшую дату (до или после):

SELECT TOP 1 MISSING_DATES.UPC, MISSING_DATES.DATE, 
DATE_GAPS.DATE, DATE_GAPS.UPC 
FROM MISSING_DATES INNER JOIN DATE_GAPS ON MISSING_DATES.UPC=DATE_GAPS.UPC 
WHERE (((DATE_GAPS.UPC)=[MISSING_DATES].[UPC])) ORDER BY
Abs(DateDiff("d",MISSING_DATES.DATE,DATE_GAPS.DATE));

Заранее спасибо!

1 Ответ

0 голосов
/ 23 января 2019

Вы можете использовать коррелированный подзапрос:

select md.*,
       (select top 1 dg.date
        from date_gaps as dg
        where dg.upc = md.upc and dg.date >= md.date
        order by dg.date
       ) as [Closest Next Date]
from missing_dates as md;

Для производительности может помочь индекс data_gaps(upc, date).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...