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 修改資料庫名稱

SQL Server 時間轉換常用方法

SQL Server While迴圈用法

arrow
arrow

    newaurora 發表在 痞客邦 留言(0) 人氣()