我正在寻找下一个问题的解决方案。
在表格中,我订阅了:
~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,则这两个订阅应该是查询的结果。
答案 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
);
注意:这没有找到完美的重叠(开始和结束日期相同)。这是因为它排除了比较中的那些,以避免确定任何记录与自身重叠。