SQL Server 每隔10分鐘統計(含每30分鐘統計)
身為資料庫管理人員,時不時的要支援前線同事,即時產出每10分鐘、每30分鐘、每小時....等統計報表已成家常便飯,但每每還是得重新推敲一下做法,趁記憶還是熱騰騰時,趕緊寫下來,也好讓大家參考參考。
SELECT
-- 組成易閱讀字串
CONVERT(datetime, CONCAT(t.date_time, ' ', t.hours_time,':' ,t.minutes_time)+':00', 120) as time
-- 計算每個account出現幾次
, COUNT(DISTINCT account_id) as count_account_id
, t.date_time, t.hours_time, t.minutes_time
FROM
-- 使用子查詢先將每筆資料的時間區段分出來
(SELECT account_id
, register_time
, CONVERT(date, DATEADD(HOUR, 8,[register_time])) as date_time
, DATEPART(hh, DATEADD(HOUR, 8,[register_time])) AS hours_time
, CASE
-- 先將每筆資料,以每隔10分鐘為一個區段分開來
WHEN DATEPART(mi, register_time)>=0 and DATEPART(mi, register_time)<10 THEN 10
WHEN DATEPART(mi, register_time)>=10 and DATEPART(mi, register_time)<20 THEN 20
WHEN DATEPART(mi, register_time)>=20 and DATEPART(mi, register_time)<30 THEN 30
WHEN DATEPART(mi, register_time)>=30 and DATEPART(mi, register_time)<40 THEN 40
WHEN DATEPART(mi, register_time)>=40 and DATEPART(mi, register_time)<50 THEN 50
WHEN DATEPART(mi, register_time)>=50 and DATEPART(mi, register_time)<=59 THEN 00
END AS minutes_time
-- 同場加映 30分鐘統計一次的做法如下
-- CASE WHEN DATEPART(mi, register_time)<30 THEN 0 ELSE 30 END AS minutes_time
FROM user_list) as t
-- 把區隔好的資料用Group BY統計後,即可得到每10分鐘的統計
GROUP BY date_time, t.hours_time, t.minutes_time
如果覺得對你有幫助的話. 請幫小弟按個讚吧~
SQL Server相關文章:
SQL Server 修改資料庫名稱
留言列表