2016-02-19 95 views
0

我有一個查詢,我需要修改以使用數據變量來搜索從今天開始的最後30天計數以及按日期分組。我的SQL服務器的/tmp/目錄(15GB)不斷填滿,查詢失敗。MySQL查詢最近30天的分類日期

SELECT DATE(`date_time`) AS DAY 
, COUNT(DISTINCT(rcid)) AS COUNT 
, COUNT(DISTINCT(tunnelip)) AS TAILS 
FROM primarydata 
WHERE SERVER LIKE"%VOE%" 
AND DATE_SUB(NOW(), INTERVAL 30 DAY) and NOW() 
GROUP BY DAY; 
+0

您的查詢只重複次數30次,不這樣做的每30天就是這個原因吧填滿工作服務器,您需要將您的date_sub與主數據表上的日期相關聯 – jclozano

+0

主數據中的哪個字段表示每條記錄的日期? – jclozano

回答

0

你可以在shell中手動運行查詢嗎?看起來你幾乎在那裏。這可能是由於小組失敗。在這個執行階段,它不知道DAY是什麼列。

嘗試:GROUP BY DATE(date_time

相反的:GROUP BY DAY。

+0

即時測試它,手動使用(date_time) – DRO

0

試試這個:

SELECT 
    DATE(`date_time`)   AS DAY, 
    COUNT(DISTINCT (rcid))  AS COUNT, 
    COUNT(DISTINCT (tunnelip)) AS TAILS 
FROM primarydata 
WHERE SERVER LIKE 
     "%VOE%" AND `date_time` BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW() 
GROUP BY `date_time`; 
+0

你需要顛倒'BETWEEN'參數。低值必須是第一。 – Barmar

+0

謝謝,但是,帶來了0條記錄 – DRO

+0

謝謝@Barmar,我調整了 – jclozano

0

您的日期檢查缺少列名進行測試,並且還缺少兩個日期之間的BETWEEN關鍵字。

SELECT 
    DATE(`date_time`)   AS DAY, 
    COUNT(DISTINCT (rcid))  AS COUNT, 
    COUNT(DISTINCT (tunnelip)) AS TAILS 
FROM primarydata 
WHERE SERVER LIKE "%VOE%" 
    AND date_time BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW() 
GROUP BY DAY; 
0

謝謝大家。我被T使用CURDATE()

AND `date_time` BETWEEN CURDATE() - INTERVAL 30 
SELECT 
    DATE(`date_time`)   AS DAY, 
    COUNT(DISTINCT (rcid))  AS COUNT, 
    COUNT(DISTINCT (tunnelip)) AS TAILS 
FROM primarydata 
WHERE SERVER LIKE "%VOE%" AND `date_time` BETWEEN CURDATE() - INTERVAL 30 DAY AND NOW() GROUP BY DAY;