我有一个表格,其中包含有关销售期间的信息,现在我需要知道某些行是否相互重叠。例如:如果有一段时间与' 01/12 / 2016'到' 31/01/2017'我想知道某些行是否重叠,例如< 15/12/2016'到' 02/02/2017'。你有什么想法吗?
NUMBER(5) DATE DATE
Period No. from date to-date
-----------------------------------------
9891 01/06/2016 31/07/2016
9892 01/08/2016 30/09/2016
9893 01/09/2016 31/10/2016 -- This row is overlapped
9894 01/11/2016 31/12/2016
9895 15/12/2016 28/02/2017 -- This row is overlapped
9896 01/03/2017 31/05/2017
我知道在两个日期之间检查一个日期的逻辑(WHERE v_date_1 BETWEEN v_date_2 AND v_date_3)但我不知道如何检查两个日期之间的两个日期!感谢。
答案 0 :(得分:4)
不确定您希望输出的格式。这是一种方法。
key(other than 3500) count
3501 1
4100 3
1234 1
我们将表连接到自身,因为我们想要比较不同的行(在同一个表中而不是在不同的表中,但概念是相同的 - 对于这样的比较,您加入表,即使它是两个副本同一张表)。这被称为“自我加入”。
然后:有两种方式,时间间隔可能不重叠:第一种方式在第二种方式开始之前结束,或第二种方式在第一种方式开始之前结束。现在NEGATE这个条件(记住“或”的否定是“和”)并且你在JOIN子句中得到了两个额外的条件。