我有以下表格格式。
**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。
提前感谢您并感谢您的努力。
答案 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