计算两个不同的值,但不是相同的值

时间:2016-02-20 01:22:51

标签: sql sql-server

我有以下表格格式。

  **ID     Name     Start Date    End Date**   
    1      ABC      1/1/2015     12/31/2015
    1      XYZ      4/1/2015     8/31//2015
    1      DEF      1/1/2012     12/31/2012
    2      ABC      1/23/2011     1/23/2012
    2      ABC      1/31/2012     1/31/2013
    3      DEF      2/12/2015     5/30/2015
    3      XYZ      4/1/2015      6/01/2015
    4      DEF      3/1/2015      12/31/2015
    4      DEF      4/1/2015      6/30/2015

我需要ID在2015年5月的日期范围内具有不同名称的计数

预期结果

ID   COUNT
1      2   
3      2

P.S-ID 4也位于2015年5月的日期范围内,但名称相同,即DEF。所以我只需要ID 1和3而不是4。

提前感谢您并感谢您的努力。

2 个答案:

答案 0 :(得分:0)

我认为您的示例数据与您想要的结果不符,但我认为这是您正在寻找的使用conditional aggregation

select id, count(*)
from yourtable
group by id
having sum(case when '5/1/2015' between startdate and enddate then 1 else 0 end) > 1
   and count(distinct name) = count(name)

sum子句中的having聚合确保该日期之间有多条记录。 count子句中的having子句确保没有重复项。

答案 1 :(得分:0)

declare
  @startdate datetime = '20150501',
  @enddate datetime = '20150531'

select t.id, count(distinct t.name)
from mytable t
where t.startdate <= @enddate and t.enddate >= @startdate
group by t.id
having count(distinct t.name) > 1