2014-10-17 123 views
0

我有以下查詢MySQL的執行查詢多時間間隔

SELECT channel_type, 
     AVG(delay_in_seconds) 
FROM a_table 
WHERE started_at BETWEEN '2014-10-17 00:00:00' AND '2014-10-17 23:59:59' 
GROUP BY channel_type; 

目前,如果我想運行在過去的10周間隔一週該查詢,我將需要運行10個獨立的查詢和手動改變間隔。這將是一個更優雅的做法呢?

回答

0

我不認爲SQL在這種情況下具有您尋找的靈活性(儘管我可能是錯的)。我不久前需要一個類似的東西,只需要反覆運行查詢。如果您擔心改進,則可以將查詢轉換爲存儲過程。

0

考慮將查詢放在腳本語言中並將結果輸出到報告文件。 Python的MySqlDb庫非常易於使用。

0

如果你想要的東西,你可以每天運行:

SELECT channel_type, AVG(delay_in_seconds) 
FROM a_table 
WHERE started_at BETWEEN CONCAT(CURDATE(), ' 00:00:00') AND CONCAT(CURDATE(), ' 23:59:59') 
GROUP BY channel_type; 

如果你需要每週摘要:

SELECT channel_type, WEEK(started_at) AS week, AVG(delay_in_seconds) 
FROM a_table 
GROUP BY channel_type, week; 

如果你每天需要摘要:

SELECT channel_type, DATE(started_at) AS dt, AVG(delay_in_seconds) 
FROM a_table 
GROUP BY channel_type, dt; 
0

請嘗試以下操作。

SELECT channel_type,AVG(delay_in_seconds),weeknum 
FROM (
     SELECT channel_type, delay_in_seconds,WEEK(started_at) as weeknum 
     FROM a_table 
     ) 
GROUP BY channel_type, weeknum; 

唯一的問題是,你會得到所有星期的結果。在計算週數後,您可以在內部查詢中添加一個子句。例如

其中週數> 25或等於