查找重叠日期

时间:2017-07-02 21:12:24

标签: mysql sql

我正在寻找下一个问题的解决方案。

在表格中,我订阅了:

~start_date~, ~end_date~, ~paid_till_date~

这些订阅也有~person_id~。

我希望构建一个查询来查找同一天付费加倍的人的订阅,并且我希望查询结果中的双倍付费订阅。有人可以帮忙吗?

例如:

person_id '2' has 2 subscriptions 

订阅:1

Start_date **2017-06-30**, End_date **2017-07-14**, Paid_till_date **2017-07-07** 

订阅:2

Start_date **2017-07-03**, End_date **2017-07-17**, Paid_till_date **2017-07-10** 

这些订阅重叠,“2”将在几天内支付两倍。

因此,如果这是唯一一个在几天内支付双倍费用的person_id,则这两个订阅应该是查询的结果。

1 个答案:

答案 0 :(得分:0)

您可以使用exists

select t.*
from t
where exists (select 1
              from t t2
              where t2.person_id = t.person_id and
                    t2.start_date < t.end_date and
                    t2.end_date > t.start_date and
                    t2.start_date <> t.start_date and
                    t2.end_date <> t.end_date
             );

注意:这没有找到完美的重叠(开始和结束日期相同)。这是因为它排除了比较中的那些,以避免确定任何记录与自身重叠。