2013-03-12 5 views
0

Я пытаюсь написать SQL-запрос, чтобы вернуть, сколько ссылок было отправлено на мой сайт за последние 7 дней. До сих пор у меня есть это:Группировка временного поля по дате

SELECT COUNT(`id`) AS `count` 
FROM `links` 
WHERE `created` > NOW() - 86400 
AND `created` < NOW() 

это работает на один день, он возвращает одну строку с именем count с числом звеньев, представленных в течение последних 24 часов. Мне нужно изменить его, чтобы вернуть 2 столбца с именем date и count с 7 строками (по одному на каждый день).

Трудная часть, в которой я не могу опустить голову, заключается в том, что created - это столбец timestamp, и у меня нет доступа к его изменению, поэтому я должен работать с ним.

Edit: незавершенное для запроса:

SELECT DAY(FROM_UNIXTIME(created)) AS day, COUNT(id) count 
FROM links 
GROUP BY DAY(FROM_UNIXTIME(created)) 
LIMIT 7 

ответ

2

NOW() фактически не должен работать, как она возвращает datetime. Кроме того, если вы хотите получить данные за 7 дней, вы хотите вычесть 604800 от UNIX_TIMESTAMP(). Затем вы можете использовать date и time с FROM_UNIXTIME. Это упростит группировку. Оптимально, ваша колонка должна быть datetime.

Это бы что-то вроде:

SELECT DAY(FROM_UNIXTIME(created)) day, COUNT(id) count 
FROM links 
WHERE created > UNIX_TIMESTAMP() - 604800 AND created < UNIX_TIMESTAMP() 
GROUP BY DAY(FROM_UNIXTIME(created)) 

в качестве альтернативы Вы можете использовать BETWEEN оператор:

WHERE created BETWEEN UNIX_TIMESTAMP() - 604800 AND UNIX_TIMESTAMP() 

See the demo

Смежные вопросы