我有一个联系人订阅表。一个联系人可以有多个订阅:
CREATE TABLE contact (
id INTEGER NOT NULL,
name TEXT,
PRIMARY KEY (id)
);
CREATE TABLE subscription (
id INTEGER NOT NULL,
contact_id INTEGER NOT NULL REFERENCES contact(id),
start_date DATE,
end_date DATE,
PRIMARY KEY (id)
);
我需要获取由没有订阅的联系人提供的所有订阅开始日期与同一订阅的另一个订阅的结束日期相同联系
因此,对于给定的数据:
INSERT INTO contact (id, name) VALUES
(1, 'John'),
(2, 'Frank');
INSERT INTO subscription (id, contact_id, start_date, end_date) VALUES
(1, 1, '2012-01-01', '2013-01-01'),
(2, 1, '2013-01-01', '2014-01-01'),
(3, 2, '2012-01-01', '2012-09-01'),
(4, 2, '2013-01-01', '2014-01-01');
我想获得ID为2、3、4但不是1的订阅,因为联系人"John"与end_date
在同一天(2013-01-01
)具有与start_date
的订阅用于CCD_ 4为1的订阅。
实现这一目标的最佳方式是什么?
SQL Fiddle
select *
from subscription s0
where not exists (
select 1
from subscription s1
where
s0.contact_id = s1.contact_id
and s1.start_date = s0.end_date
)
order by contact_id, id