提问者:小点点

在日期范围联接上填充数据库


我有一个数据集,日期设置为每月的第一个。例如-

我需要加入这张桌子:

通常情况下,我会对这一条加一个权利-

WHERE DATE BETWEEN START DATE AND END DATE

...它工作良好,日期2021-02-01。那是在2021-01-30和2021-02-12之间。

类似地,2021-03-01日期介于2021-02-27和2021-03-12之间

然而!开始日期为2021-02-13、结束日期为2021-02-26的支付期间的值为空。我希望表A中二月份的日期也为此行填充。

我希望表A中的数据有两行,其中一行的起始日期为2021-01-30,结束日期为2021-02-12,另一行的起始日期为2021-02-13,结束日期为2021-02-26。(因为两个支付期都在2月份)。结果数据集应该是这样的-

这是我正在使用的查询-

SELECT * 
  FROM A 
 RIGHT 
  JOIN B
    ON A.DATE BETWEEN B.START DATE AND B.END DATE

共1个答案

匿名用户

我假设表B示例中缺少2021-01-152021-01-29的日期范围。如果是,则该查询应该能够返回您预期的结果:

SELECT Units, Date, StartDate, EndDate
  FROM tableA a
  LEFT JOIN tableB b
    ON a.Date <= b.EndDate
    AND MONTH(a.Date) = MONTH(b.EndDate)
    ORDER BY b.StartDate

而不是右联接,我选择了左联接。然后将表A中的日期表B中的结束日期进行比较,并使用月()日期月与结束日期月匹配。使用所提供的示例(包括假定的缺失日期范围),这将返回与您预期的结果完全相同的结果。

这里有一个小提琴:https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=02c027506954489377a8e484693bff57