Применить ГДЕ после GROUP BY - PullRequest
       17

Применить ГДЕ после GROUP BY

10 голосов
/ 19 сентября 2011

У меня есть таблица с элементами, которые являются частью потока, поэтому у них есть идентификатор потока, у каждого элемента также есть дата (метка времени UNIX).Моя таблица выглядит примерно так (временные метки UNIX упрощены):

+-----------------------------+
|  id |   date  |  thread_id  |
+-----+---------+-------------+
|  1  |   1111  |      4      |
|  2  |   1333  |      4      |
|  3  |   1444  |      5      |
|  4  |   1666  |      5      |
+-----------------------------+

Что я хочу сделать, это выбрать идентификаторы потоков, где ВСЕ элементы с одинаковым идентификатором потока меньше, чем пройденная дата.Поэтому, если бы я хотел идентификаторы потоков, где ВСЕ элементы старше 1555 (дата <1555), я бы ожидал, что вернется только идентификатор потока 4, а не 5, даже если у него есть элемент с датой меньше 1555. Так вотпробовал: </p>

SELECT * FROM table WHERE date < 1555 GROUP BY thread_id ORDER BY date DESC

Что я пытаюсь сделать с этим запросом, так это сгруппировать все элементы по идентификатору потока вокруг элемента с наибольшим значением даты и оттуда получить элементы, дата которых меньше 1555.Но это не сработает, он по-прежнему будет возвращать идентификатор потока 5, потому что у него есть элемент старше 1555.

Итак, подведем итог: как мне выбирать идентификаторы потоков, где ВСЕ элементы старше определенной даты?

Спасибо, что уделили время!

Ответы [ 2 ]

22 голосов
/ 19 сентября 2011
SELECT thread_id FROM table GROUP BY thread_id HAVING MAX(date) < 1555
5 голосов
/ 19 сентября 2011

Используйте предложение HAVING. Это позволяет вам фильтровать по таким агрегатам, как SUM, MAX ... Здесь вы хотите выбрать только те идентификаторы потоков, чья последняя запись старше 1555, поэтому вы пишете:

SELECT * FROM table 
    GROUP BY thread_id 
    HAVING MAX(date) < 1555
    ORDER BY date DESC  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...