我有以下数据
- 日期---------输入
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
答案 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等相结合。如果您始终在同一年(或月份)内查询,则不需要它。