0

我目前有一个查询返回,例如,以下内容:(您可以假设这是表结构的样子)

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. 这实际上是对多项服务的概述,有时其中一项服务的开始或结束日期不同。(非常罕见,但我需要处理这种情况。)

因此,考虑到上述情况,我想要一个返回第 1、2、3 和 5 行的查询。

我的想法和方法是:

  • 如果 start_dates 相等,则显示最大结束日期。(按客户 ID 和开始日期分组,最大值(结束日期))
  • 如果 end_dates 相等,则显示最小开始日期。(按客户 ID 和结束日期分组,分钟(​​开始日期))

我可以编写一个查询来执行上述操作之一,但我不确定我如何能够同时执行这两个操作。或者,如果完全不同的方法会更好。

SQL Server 2008

谢谢!

4

1 回答 1

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)
于 2013-05-20T21:01:15.567 回答