Ⅰ t-sql中有关时间分组的问题:我有一个时间列,datetime类型的, 我想按每天的小时去分组
提供一个思路,实时上我们也一般这么干
1.将datetime转类型为字符串 ,按照年月日时分秒
2,截取字符串,取年月日时并分组
3.完成分组后,转换回来
在ORACLE里,是类似如下的代码
select to_date(substr( to_char(datetime,'yyyy-mm-dd-hh-mi-ss'),1,13),'yyyy-mm-dd-hh')from table t
group by substr( to_char(datetime,'yyyy-mm-dd-hh-mi-ss'),1,13)
Ⅱ SQL按时间分组查询
select MONTH(B),sum(A) FROM tt GROUP BY MONTH(B)
Ⅲ 有这么一个表,三个联合主键,想用sql语句将数据分组,其中一列是时间,想按小时分组,怎么写SQL语句
select * from 表名 group by to_char(时间列名,'hh')
Ⅳ sql 时间段分组统计查询
有点点麻烦,需要先构建一个关于时间段的虚表
先找到你订单的最早的时间,然后找一个行数足够多的表
假设你的表名叫s,也就是你罗列出数据这个表
withtas
(selectrow_number()over(orderbyid)-1rnfromsheet2)--sheet2替换成你行数足够多的表,还有orderbyid里的id你随便替换你表里的一个字段
selectdateadd(hour,10+24*t.rn,cast('2013/3/1'asdatetime))begin_time,--2013/3/1换成你表里的最小时间
dateadd(hour,10+24*(t.rn+1),cast('2013/3/1'asdatetime))end_time,
count(*)订单数量
fromt,s--这个s替换成你自己的表名
wherecast(s.时间)>=dateadd(hour,10+24*t.rn,cast('2013/3/1'asdatetime))
andcast(s.时间)<dateadd(hour,10+24*(t.rn+1),cast('2013/3/1'asdatetime))
Ⅳ sql 按照小时分组查询并统计
--模拟销售的表.
CREATETABLE#temp(
[销售时间]datetime,
[销量]int,
[实销]int
)
go
--由于成本与毛利,我估计应该是在另外一个表里面的,这里就不模拟了
INSERTINTO#temp
--9点的
SELECT'2013-07-1609:55:15',9,900UNIONALL
--10点的
SELECT'2013-07-1610:15:15',1,100UNIONALL
SELECT'2013-07-1610:25:15',15,1500UNIONALL
SELECT'2013-07-1610:35:15',10,1000UNIONALL
--11点的
SELECT'2013-07-1611:15:15',1,100UNIONALL
SELECT'2013-07-1611:25:15',2,200UNIONALL
SELECT'2013-07-1611:35:15',3,300UNIONALL
SELECT'2013-07-1611:45:15',4,400UNIONALL
SELECT'2013-07-1611:55:15',5,500UNIONALL
--其他的.
SELECT'2013-07-1612:15:15',12,1200UNIONALL
SELECT'2013-07-1613:15:15',13,1300UNIONALL
SELECT'2013-07-1614:15:15',14,1400UNIONALL
--中间缺少15点与16点的
SELECT'2013-07-1617:15:15',17,1700UNIONALL
SELECT'2013-07-1618:15:15',18,1800;
goSELECT
ISNULL(Convert(varchar(2),sv.number)+'-'+Convert(varchar(2),sv.number+1),'合计')AS[销售时段],
SUM([销量])AS[销量],
SUM([实销])AS[实销],
(SELECTSUM([实销])FROM#tempt2WHEREDATEPART(hh,t2.[销售时间])<=ISNULL(sv.number,23))AS[累计实销]
FROM
master..spt_valuessv
JOIN#tempt
ON(sv.number=DATEPART(hh,t.[销售时间]))
WHERE
sv.type='P'
ANDsv.number>=9
ANDsv.number<20
GROUPBY
sv.numberWITHrollup
GO
销售时段销量实销累计实销
--------------------------------------
9-109900900
10-112626003500
11-121515005000
12-131212006200
13-141313007500
14-151414008900
17-1817170010600
18-1918180012400
合计1241240012400
(9行受影响)
这样行么?
Ⅵ sql 按时间分类查询数据,比如:按一天时间段分类查询访问次数查询语句怎么写举个例子
如果你的时间段是均匀的,比如一天24小时内,每4个小时为一个周期,那么可以这么写
select coutn(ID) from T group by trunc (to_char(time,'hh24') / 4)
--to_char(time,'hh24')是取出小时部分,trunc是求商,把小时部分除以4,则每4个小时内的都会在一起
如果时间段不均匀,那么只能每个时间段单独写了
示例
select count(ID) from T where to_char(time,'hh24')<结束时间 and to_char(time,'hh24') >=开始时间
Ⅶ Oracle按半小时分组的sql
想到一个办法,不过还要再套一层才行。
利用case when将原表稍作改动,就是类似case when to_char(时间,'mi')<30 then 'A' else 'B' end 分段字段
这样就会出现一个新字段,字段是由A或B组成的,然后分组的时候,用时间(到小时,就是你的‘YYYY-mm-dd HH24‘)+AB分段字段 组合分组,这样就是半小时一分组了。
Ⅷ sql 实现按日期分组
需要用convert函数转换日期格式,并且需要用group
by来实现分组。
1、创建测试表及插入数据:
create table test
(tdate datetime,
sal int);
insert into test values ('2015-09-23 12:22:22',100);
insert into test values ('2015-09-23 01:54:34',456);
insert into test values ('2015-09-24 14:32:35',45);
insert into test values ('2015-09-24 22:23:43',67);
insert into test values ('2015-09-25 19:43:22',234);
insert into test values ('2015-09-25 08:14:12',67);
insert into test values ('2015-09-26 04:53:34',45);
insert into test values ('2015-09-26 09:46:54',78);2、执行sql语句:
select convert(varchar(10),tdate,120) tdate,sum(sal) sal from test group by convert(varchar(10),tdate,120);3、执行结果: