后端開發 - mysql按時間分段統計的sql語句怎么寫好?
問題描述
我的數據庫表結構如下:
字段分別是ID,NUM1,NUM2, TIME1,TIME2, MONEY.
想要按照15分鐘為間隔來統計ID的數量。效果如同下面的sql語句。
SELECT sum(CASE when TIME1 >= ’2014-02-27 8:00:00’ and TIME1 < ’2014-02-27 8:15:00’ then 1 else 0 end) AS ’1’, sum(CASE when TIME1 >= ’2014-02-27 8:15:00’ AND TIME1 < ’2014-02-27 8:30:00’ then 1 else 0 end) AS ’2’, sum(CASE when TIME1 >= ’2014-02-27 8:30:00’ AND TIME1 < ’2014-02-27 8:45:00’ then 1 else 0 end) AS ’3’, sum(CASE when TIME1 >= ’2014-02-27 8:45:00’ AND TIME1 < ’2014-02-27 9:00:00’ then 1 else 0 end) AS ’4’, sum(CASE when TIME1 >= ’2014-02-27 9:00:00’ and TIME1 < ’2014-02-27 9:15:00’ then 1 else 0 end) AS ’5’ from dealdata;
但是像上面那么寫重復代碼多,并且如果我改成30分鐘的話,就要改動很多,所以求助sql大神,看有什么好的方法。
———————————————————————————————————分割線————————————————————————————————————
謝謝 arm 同志的幫助,現在能查詢出現了
count(id)就是進站的人但是有的時間段,根本沒有進站的人,所以有的時間段沒有,例如5:00 -- 5:15 如果要將沒有進站的人的時間段 補全為0,該怎么做呢?
問題解答
回答1:謝邀,可以縱向排列的化,如下
SELECT count(id)from dealdatawhere timestampdiff(minute,’2014-02-27 9:15:00’,`TIME1`)<0 and timestampdiff(minute,’2014-02-27 8:00:00’,`TIME1`)>=0group by floor(timestampdiff(minute,’2014-02-27 8:00:00’,`TIME1`)/15)
where 限制時間段,group by里面除以你需要的時間間隔。我不知道你為什么出錯,可能和mysql版本有關,我是mysql5.6
SELECT count(*),floor(timestampdiff(minute,’2017-1-18 16:00:00’,`time`)/30),date_add(’2017-1-18 16:00:00’,interval 30*floor(timestampdiff(minute,’2017-1-18 16:00:00’,`time`)/30) MINUTE)FROM 我是馬賽克.我是馬賽克group by floor(timestampdiff(minute,’2017-1-18 16:00:00’,`time`)/30)
結果看了下,跑的還是蠻快的,0.3s不到
列數不定啊,真的定義不少變量
回答3:腳本驅動MySQL ,定制一個變量。也許有更好的辦法,我就閑的回答了下
相關文章:
1. java - mongodb分片集群下,count和聚合統計問題2. javascript - vue 移動端的input 數字輸入優化3. java - 自己制作一個視頻播放器,遇到問題,用的是內置surfaceview類,具體看代碼!4. javascript - 有什么兼容性比較好的辦法來判斷瀏覽器窗口的類型?5. 服務器端 - 采用nginx做web服務器,C++開發應用程序 出現拒絕連接請求?6. 為什么我ping不通我的docker容器呢???7. python - pandas按照列A和列B分組,將列C求平均數,怎樣才能生成一個列A,B,C的dataframe8. 關于docker下的nginx壓力測試9. javascript - npm start 運行’webpack-dev-server’報錯 Cannot find module ’webpack’10. java 隨機延遲執行
