我有一个数据集,日期设置为每月的第一个。例如-
我需要加入这张桌子:
通常情况下,我会对这一条加一个权利-
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
我假设表B
示例中缺少2021-01-15
到2021-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