@Angel1

Как правильно сформулировать SQL запрос?

Привет!
Есть таблица: analytics со следующими полями: id, count, created_at

В таблицу каждые пять минут добавляются данные, count постоянно растёт. Необходимо вывести данные за последние пять дней, у которых count равен самой последней записи за сутки.
Т.е. на выходе должно получиться:

21.12.2016 - 300
22.12.2016 - 310
23.12.2016 - 340
24.12.2016 - 355
25.12.2016 - 371

Вся суть в том, что count каждой даты должен быть от последней записи этого дня.
Это нужно для формирования графика по дням, в определённой аналитики.
  • Вопрос задан
  • 249 просмотров
Пригласить эксперта
Ответы на вопрос 4
DaFive
@DaFive
Эммм, вам нужна группировка по created_at?

SELECT COUNT(id), created_at FROM table GROUP BY created_at

Ну даты в WHERE сами подставьте.
Ответ написан
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
SELECT created_at,MAX(count) FROM analytics GROUP BY created_at ORDER BY created_at  LIMIT 5;
Ответ написан
@Angel1 Автор вопроса
Нет, Вы меня не правильно поняли.
В created_at хранится timestamp, за сутки сутки собирается более тысячи записей. Получается, что просто вывести записи с limit 5 и order by created_at не подходит, ибо вернёт 5 последних записей за 25 минут, а мне нужно за 5 дней при том что значение count для каждого дня должно быть по самой последней записи этого дня.
Ответ написан
akzhan
@akzhan
Можно в лоб

SELECT DATE(FROM_UNIXTIME(`created_at`)) AS thedate, MAX(count) FROM analytics WHERE DATE(FROM_UNIXTIME(CURRENT_TIMESTAMP)) = DATE(FROM_UNIXTIME(`created_at`)) GROUP BY DATE(FROM_UNIXTIME(`created_at`))

UNION ALL

SELECT DATE(FROM_UNIXTIME(`created_at`)) AS thedate, MAX(count) FROM analytics WHERE DATE(FROM_UNIXTIME(CURRENT_TIMESTAMP - day)) = DATE(FROM_UNIXTIME(`created_at`)) GROUP BY DATE(FROM_UNIXTIME(`created_at`))

UNION ALL

SELECT DATE(FROM_UNIXTIME(`created_at`)) AS thedate, MAX(count) FROM analytics WHERE DATE(FROM_UNIXTIME(CURRENT_TIMESTAMP - 2days)) = DATE(FROM_UNIXTIME(`created_at`)) GROUP BY DATE(FROM_UNIXTIME(`created_at`))

UNION ALL

SELECT DATE(FROM_UNIXTIME(`created_at`)) AS thedate, MAX(count) FROM analytics WHERE DATE(FROM_UNIXTIME(CURRENT_TIMESTAMP - 3days)) = DATE(FROM_UNIXTIME(`created_at`)) GROUP BY DATE(FROM_UNIXTIME(`created_at`))

UNION ALL

SELECT DATE(FROM_UNIXTIME(`created_at`)) AS thedate, MAX(count) FROM analytics WHERE DATE(FROM_UNIXTIME(CURRENT_TIMESTAMP - 4days)) = DATE(FROM_UNIXTIME(`created_at`)) GROUP BY DATE(FROM_UNIXTIME(`created_at`))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы