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
);