当前位置:首页 » 编程语言 » sql分组汇总按小时
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql分组汇总按小时

发布时间: 2023-01-07 20:06:04

① Oracle按半小时分组的sql

想到一个办法,不过还要再套一层才行。
利用case when将原表稍作改动,就是类似case when to_char(时间,'mi')<30 then 'A' else 'B' end 分段字段
这样就会出现一个新字段,字段是由A或B组成的,然后分组的时候,用时间(到小时,就是你的‘YYYY-mm-dd HH24‘)+AB分段字段 组合分组,这样就是半小时一分组了。

② 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查询如何按每个小时查询那个时间段的总数

1、新建JUnit test。

④ 按时间段group by的 sql怎么写

如果是按照 年月日,时分秒这样的 可以通过

#按小时分组
SELECTCOUNT(*),FROM_UNIXTIME(dt)FROMsub_dateGROUPBYFROM_UNIXTIME(dt,'%Y-%m-%d%H')
#按分钟分组
SELECTCOUNT(*),FROM_UNIXTIME(dt)FROMsub_dateGROUPBYFROM_UNIXTIME(dt,'%Y-%m-%d%H:%i')
#按天分组
SELECTCOUNT(*),FROM_UNIXTIME(dt)FROMsub_dateGROUPBYFROM_UNIXTIME(dt,'%Y-%m-%d')

其他类推

不规则时间分组

#按15分钟分组

SELECTCOUNT(*),FROM_UNIXTIME(dt)FROMsub_dateGROUPBYDATE_SUB(FROM_UNIXTIME(dt,'%Y-%m-%d%H:%i'),INTERVAL+15MINUTE)

⑤ 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语句将数据分组,其中一列是时间,想按小时分组,怎么写SQL语句

select * from 表名 group by to_char(时间列名,'hh')

⑦ 怎么用sql语句按照每个小时用group by 汇总数据

楼上的兄弟的方法是在SQL
SERVER中的。如果你在ORACLE里,可以用如下方法select
to_char(e,'yyyy-mm-dd
hh'),sum(s)
from
table_test
group
by
to_char(e,'yyyy-mm-dd
hh')

⑧ sql 根据时间分组统计,求解决思路,解决办法。

你这数据太有问题了,tradeorder表开始时间 到 结束时间有重复的,这样会有大量的冗余,
如果你坚持的,那就只能这样了
select A.*,max(B.LASTPRICE) from tradeorder A,priceLog B
where A.INSTRUMENTID=B.INSTRUMENTID
and to_date(B.OPENDAY||B.OPENTIME,'yyyymmddhh24:mi:ss')>to_date(A.OPENDAY||A.OPENTIME,'yyyymmddhh24:mi:ss')
and to_date(B.OPENDAY||B.OPENTIME,'yyyymmddhh24:mi:ss')<to_date(A.Closeday||A.Closetime,'yyyymmddhh24:mi:ss')
group by A.InstrumentId,A.OPENDAY,A.OPENTIME,A.CLOSEDAY,A.CLOSETIME

⑨ 求一个sql查询,能够获得每个小时的数据汇总,或者3个小时

select convert(nvarchar(13),time,121) timeName,sum(num) nums from
table group by convert(nvarchar(13),time,121)

⑩ 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)