sql 时间段分组统计查询

SQLsever2008数据库,请问各位江湖大侠,请指点:假如我有几百万条如下数据,我需要按时间段分组(今天10:00-明天10:00)统计有多少订单量该怎么写sql?前... SQL sever 2008 数据库,请问各位江湖大侠,请指点:假如我有几百万条如下数据,我需要按时间段分组(今天10:00 - 明天10:00) 统计有多少订单量该怎么写sql?前提是按(今天10:00 - 明天10:00)为一组,数据举例如下:
订单(int) 时间(string)

订单1 2013/3/1 0:23

订单2 2013/3/2 0:23

订单3 2013/3/3 1:23

订单4 2013/3/4 0:23

订单5 2013/3/5 0:53

订单6 2013/3/6 0:23

订单7 2013/3/7 7:23

订单8 2013/3/8 0:23

订单9 2013/3/9 0:23

订单10 2013/3/10 0:23

订单11 2013/3/11 0:23

订单12 2013/3/12 8:23

订单13 2013/3/13 0:23

订单14 2013/3/14 0:23

订单15 2013/3/15 0:23

订单16 2013/3/16 0:23

订单17 2013/3/17 0:33

订单18 2013/3/18 0:23

订单19 2013/3/19 0:23

订单20 2013/3/20 0:12 .....
展开
 我来答
badkano
2013-06-15 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885365
团长

向TA提问 私信TA
展开全部

有点点麻烦,需要先构建一个关于时间段的虚表

先找到你订单的最早的时间,然后找一个行数足够多的表

假设你的表名叫s,也就是你罗列出数据这个表

with t as 
(select row_number() over (order by id)-1 rn from sheet2)--sheet2替换成你行数足够多的表,还有order by id里的id你随便替换你表里的一个字段
select dateadd(hour,10+24*t.rn,cast('2013/3/1' as datetime)) begin_time,--2013/3/1换成你表里的最小时间
dateadd(hour,10+24*(t.rn+1),cast('2013/3/1' as datetime)) end_time,
count(*) 订单数量 
from t,s--这个s替换成你自己的表名
where cast(s.时间)>=dateadd(hour,10+24*t.rn,cast('2013/3/1' as datetime))
and cast(s.时间)<dateadd(hour,10+24*(t.rn+1),cast('2013/3/1' as datetime))
水口満里奈12
2013-06-16 · 超过13用户采纳过TA的回答
知道答主
回答量:60
采纳率:100%
帮助的人:19.6万
展开全部
没用过sqlserver,都是oracle,mysql。不过原理上应该都是一样的。

首选时间字段列拆成两列 日期(date) 和小时(hour),都是数字型 这是第一层sql,比如2013/3/3 1:23 拆成

20130303 1 ,2013/3/3 11:23 拆成 20130303 11。 然后奖这两列再合成一个分组列 ,用case when语句 对小时列进行判断,如果小时列小于10,则合并后的分组列 =日期列-1,如果大于10,则+0,sql语句,select date+(case when hour<10 then -1 else 0 end) from 第一层结果。上面的两个例子合并后的分组列分别是 20130302,20130303。最后对分组列group by 就搞定
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
客厅沙发三件套
推荐于2017-11-25 · TA获得超过130个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:77.7万
展开全部
我觉得可以这样。比较清晰。其实你这个说白了就是按天分组而已,只不过是时间上是10点。
可以先将数据的时间列都减少10小时,再按天分组。
select DATEPART(YYYY,T.newDate),DATEPART(MM,T.newDate),DATEPART(DD,T.newDate),COUNT(*) from
(
select Id,DATEADD(HOUR,-10,orderdate) as newDate from [table]
) as T
group by DATEPART(YYYY,T.newDate),DATEPART(MM,T.newDate),DATEPART(DD,T.newDate)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式