сортировка значений внутри group by

337
17 октября 2017, 01:26

Есть таблица

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?

Answer 1

Значения агрегатных функций после группировки можно проверить в предложении 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
Answer 2

Вроде так:

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 и коррелированным подзапросом.

READ ALSO
Не отправляется запрос на mysql из nodejs

Не отправляется запрос на mysql из nodejs

Делаю мод для rage mp (gta 5) и сервер на nodejs и javascript построен

286
Не работает запрос SQL c поиском по тексту

Не работает запрос SQL c поиском по тексту

Мне нужен запрос с выборкой объектов по условию, наличия текста в колонках

234
Как экспортировать пакет в *.jar используя AndroidStudio?

Как экспортировать пакет в *.jar используя AndroidStudio?

Есть пакет с библиотекой javaxСкачан отсюда: http://hg

197