【问题标题】:Access/SQL: How to get the next closest date in Access query?Access/SQL:如何在 Access 查询中获取下一个最接近的日期?
【发布时间】: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 语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接!

标签: sql ms-access


【解决方案1】:

您可以使用相关子查询:

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) 上的索引会有所帮助。

【讨论】:

  • 感谢 Gordon - 这似乎有效,但运行后会导致 Access 崩溃。知道为什么吗? Missing_Dates 表是 ~20k 记录,Date_Gaps 表是 ~147k
  • @BenjaminMandowsky 。 . .我不知道为什么它会导致 MS Access 在运行后 崩溃。我添加了关于索引的评论,这应该有助于提高性能。
  • Date_Gaps 表中已有索引。可以编辑代码以使用索引以使其性能更好吗?
  • @BenjaminMandowsky 。 . .这个查询应该使用我在答案中特别提到的索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2012-08-02
相关资源
最近更新 更多