【发布时间】:2019-01-23 06:22:05
【问题描述】:
我有两个要加入的表,并将表 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));
提前致谢!
【问题讨论】:
-
今日提示:始终使用现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接!