Есть таблица
user | show
apple | 2017-10-13 23:00:00
peach | 2017-10-13 22:00:00
apple | 2017-10-12 22:00:00
peach | 2017-10-13 21:00:00
нужно выбрать user у которого после последнего show прошло больше суток. Запрос написал но он не хочет работать:
SELECT * , max( `show` ) AS `last_show`
FROM `tbl`
WHERE `last_show` < NOW( ) - INTERVAL 1 DAY
GROUP BY `user`
ORDER BY `last_show` ASC
LIMIT 1
Как отсортировать значение внутри group by?
Значения агрегатных функций после группировки можно проверить в предложении HAVING, но не в WHERE (которое выполняется до группировки):
SELECT * , max( `show` ) AS `last_show`
FROM `tbl`
GROUP BY `user`
HAVING max(`show`) < NOW( ) - INTERVAL 1 DAY
ORDER BY `last_show` ASC
LIMIT 1
Вроде так:
SELECT user, MAX(show) AS last_show
FROM tbl
WHERE user NOT IN ( SELECT DISTINCT user
FROM tbl
WHERE show >= NOW( ) - INTERVAL 1 DAY
)
GROUP BY user
ORDER BY last_show
Ну или аналогичное с NOT EXISTS и коррелированным подзапросом.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости