У меня есть две таблицы, к которым я хотел бы присоединиться и сопоставить дату из таблицы 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));
Заранее спасибо!