我有一张表,上面有下列数据。
CREATE TABLE DiscountFormula (
id int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY
, dateFrom date
, dateUntil date
);
INSERT INTO DiscountFormula
(dateFrom, dateUntil)
VALUES
("2020-06-01", "2020-06-10")
, ("2020-06-03", "2020-06-13")
, ("2020-06-25", "2020-06-29")
, ("2020-07-01", "2020-07-01")
, ("2020-07-03", "2020-07-03")
;
小提琴演示
id dateFrom dateUtil
==== ======== ========
1 2020-06-01 2020-06-10
2 2020-06-03 2020-06-13
3 2020-06-25 2020-06-29
4 2020-07-01 2020-07-01
5 2020-07-03 2020-07-03
正如你所看到的 1
以及 2
是日期范围上的重叠。我想创建一个查询来检测表中是否有重叠的日期范围。意思是如果 count > 0
有重叠的数据,所以我可以抛出一个警报消息。我试过了,但似乎不管用。
SELECT * #count(*) as TOTAL
FROM DiscountFormula A
JOIN DiscountFormula B
ON (A.dateFrom >= B.dateFrom AND A.dateFrom <= B.dateUntil)
OR (A.dateUntil >= B.dateFrom AND A.dateUntil <= B.dateUntil)
2条答案
按热度按时间xesrikrc1#
你检测重叠范围的公式有点错误。应该是这样的:
更新的查询:
klr1opcd2#
我建议使用累积最大值:
这应该比自连接快得多。如果
count(*)
是0
那么就没有重叠了。实际上,我认为
lag()
足以解决此问题: