一个月中每周的类型计数

时间:2014-08-03 16:50:11

标签: sql sql-server sql-server-2008

我有以下数据

- 日期---------输入

  

2014年6月1日

     

2014年6月2日-ss

     

2014年6月3日-pp

     

6/4/2014 -PP

     

2014年6月5日-ss

     

6/6/2014 -pp

     

2014年6月7日
  2014年6月8日

     

2014/6/9 pp

     

6/10/2014 PP

     

2014年6月11日ss

     

6/12/2014 pp

     

2014/6/13 PP

     

2014年6月14日
  2014年6月15日

     

结果应该是这样的

------ 6/2/2014至6/6/2014 ---------- 2014/6/9至2014/6/13

  

ss ------ 2 --------------------------------- 1

     

pp ------ 3 --------------------------------- 4

1 个答案:

答案 0 :(得分:0)

您可以使用以下内容:

小提琴: http://sqlfiddle.com/#!3/937f0/6/0

select min(dt) as dt_from, max(dt) as dt_to, type, count(*) as num
from tbl
where type is not null
group by datepart(year, dt)+datepart(week, dt), type
order by 1

它在功能上等同于你想要的,但每周都是一行(不是一列)

在旁注中,如果在一周的开始/结束时没有数据,则dt_from和dt_to不一定是一周的开始/结束,但它仍然按周分组。如果你想显示周#和年,你可以将我放入group by子句中的内容添加到选择列表中,你将在该列中获得年份和周#。

此外,如果您从未查询超过1年的时间范围,您可以按以下方式分组:

group by datepart(week, dt), type

如果要查询2年以上的数据,则在第一个查询中提取年份,以避免2013年的第12周,第13周等与2014年第12,13等相结合。如果您始终在同一年(或月份)内查询,则不需要它。