2016-02-19 2 views
0

У меня есть запрос, который мне нужно изменить, чтобы использовать переменные данных для поиска в течение последних 30 дней с сегодняшнего дня и по дате. Мой каталог SQL-сервера /tmp/ (15 ГБ) продолжает заполняться, и запрос завершается с ошибкой.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 с датой в таблице primarydata – jclozano

+0

Какое поле в первичных данных представляет дату для каждой записи? – jclozano

ответ

0

Можете ли вы запустить запрос вручную в оболочке? Похоже, ты почти там. Это может быть неудачно в группе. На этом этапе выполнения он не знает, какой столбец ДЕНЬ.

Try: GROUP BY DATE (date_time)

Вместо: GROUP BY DAY.

+0

im тестирование, вручную используя (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

Вам необходимо изменить аргументы «МЕЖДУ». Низкое значение должно быть первым. – 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

Спасибо всем. Я получил т работать, используя 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;