當前位置:首頁 » 編程語言 » 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)