我目前有一个返回的查询,例如,以下内容:(您可以假设这是表结构的样子)
customer_id | start_date | end_date
1 | 20120101 | 20120401
2 | 20120402 | 20121231
1 | 20130101 | 20130401
1 | 20130101 | 20130330
2 | 20130331 | 99991231
2 | 20130402 | 99991231
有两点需要考虑:
因此,考虑到上述情况,我想要一个将返回第1行,第2行,第3行和第5行的查询。
我的想法&对此的处理方法是:
我可以编写一个可以执行上述操作之一的查询,但我不确定如何能够同时执行这两个操作。或者如果完全不同的方法会更好。
SQL Server 2008
谢谢!
答案 0 :(得分:0)
我认为您可以使用not exists
条件 -
您可以使用以下查询进行此输出 -
select customer_id , start_date , end_date
from table_name t_1
where not exists(
select 1 from table_name t_2
where t_2.customer_id = t_1.customer_id
and t_2.start_date = t_1.start_date
and t_2.end_date > t_1.end_date)
and not exists (
select 1 from table_name t_3
where t_3.customer_id = t_1.customer_id
and t_3.end_date = t_1.end_date
and t_3.start_date<t_1.start_date)