delphinpro
@delphinpro
frontend developer

Как сгруппировать выборку по дням?

Есть таблица с полем
`state_at` TIMESTAMP NOT NULL,
Несколько раз в день в нее вносятся данные.
На графике нужно отобразить детализацию по дням.
Т.е. по сути нужно взять последние внесенные за день значения.

Для примера
2020-09-01 18:00:54 | 740
2020-09-02 03:00:55 | 1421
2020-09-02 12:00:56 | 1561
2020-09-02 21:00:54 | 1648
2020-09-03 06:00:58 | 1687
2020-09-03 14:00:58 | 1712


Нужно в выборке получить значения 740, 1648, 1712
UPD: значение второго столбика может меняться и в минус, но актуально всегда последнее за день
Никак не соображу с запросом.
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT DATE(`t`.`state_at`) AS `date`, `t`.`value`
  FROM (
    SELECT MAX(`state_at`) AS `max`
      FROM `table`
      GROUP BY DATE(`state_at`)
  ) AS `m`
  JOIN `table` AS `t`
    ON `t`.`state_at` = `m`.`max`

Начиная с MySQL 8 можно через оконные функции:
SELECT DISTINCT
    DATE(FIRST_VALUE(`state_at`) OVER `win`) AS `date`,
    FIRST_VALUE(`value`) OVER `win` AS `value`
  FROM `table`
  WINDOW `win` AS (
    PARTITION BY DATE(`state_at`)
    ORDER BY `state_at` DESC
  )
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@aleksandr97
Пишу на PHP, изучаю GOLANG
Примерно так:
select DATE_FORMAT(state_at, '%Y-%m-%d') as day, MAX(value) as value from test group by day
Ответ написан
Fernus
@Fernus
Техник - Механик :)
SELECT MAX(`date`), `field` FROM `table` GROUP BY TO_DAYS(`date`)
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы