Mysql 查找重叠日期

Mysql 查找重叠日期,mysql,sql,Mysql,Sql,我在寻找下一个问题的答案 在一个表中,我有以下订阅: ~start_date~, ~end_date~, ~paid_till_date~ 这些订阅还具有~person\u id~ 我期待着建立一个查询,以找到那些在同一天支付双倍费用的人的订阅,我希望在查询结果中显示双倍付款的订阅。有人能帮忙吗 例如: person_id '2' has 2 subscriptions 订阅:1 Start_date **2017-06-30**, End_date **2017-07-14**, Pai

我在寻找下一个问题的答案

在一个表中,我有以下订阅:

~start_date~, ~end_date~, ~paid_till_date~
这些订阅还具有~person\u 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”将在几天内支付双倍的费用

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

您可以使用exists:


注意:在开始日期和结束日期相同的情况下,这并没有找到完美的重叠。这是因为它将这些记录从比较中排除,以避免确定任何记录与其自身重叠。

我可以通过按日期查找2个以上的活动订阅来找到它们。但是,将SQL中的记录与同一表中的其他记录进行比较超出了我目前的知识范围……请参阅感谢Gordon的回复。我不需要知道完美的重叠,只要它们交叉。你能帮我做一下de t&t2吗?我知道是桌子,但有什么区别?还有《苏伯克利》中的1号?@AntonTimmerman。这将返回与同一个人的其他记录重叠的所有记录,但完全重叠的记录除外。t是您的表名。t2是一个别名。
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
             );