我有以下查詢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個獨立的查詢和手動改變間隔。這將是一個更優雅的做法呢?
我有以下查詢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個獨立的查詢和手動改變間隔。這將是一個更優雅的做法呢?
我不認爲SQL在這種情況下具有您尋找的靈活性(儘管我可能是錯的)。我不久前需要一個類似的東西,只需要反覆運行查詢。如果您擔心改進,則可以將查詢轉換爲存儲過程。
考慮將查詢放在腳本語言中並將結果輸出到報告文件。 Python的MySqlDb庫非常易於使用。
如果你想要的東西,你可以每天運行:
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;
請嘗試以下操作。
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或等於