我有一个表,其中的项目是一个线程的一部分,因此它们有一个线程ID,每个项目也有一个日期(UNIX时间戳)。所以我的表看起来像(UNIX时间戳简化):
+-----------------------------+
| id | date | thread_id |
+-----+---------+-------------+
| 1 | 1111 | 4 |
| 2 | 1333 | 4 |
| 3 | 1444 | 5 |
| 4 | 1666 | 5 |
+-----------------------------+
我想要做的是选择线程ID,其中共享相同线程ID的所有项都小于传递的日期。因此,如果我想要所有项目早于1555(日期< 1555)的线程ID,我只希望返回线程ID 4,而不是5,即使它有一个日期小于1555的项目。所以这就是我试过了:
SELECT * FROM table WHERE date < 1555 GROUP BY thread_id ORDER BY date DESC
我正在尝试对该查询进行的操作是按照具有最高日期值的项目的线程ID对所有项目进行分组,并从那里获取日期小于1555的项目。但这不起作用,它仍将返回线程ID 5,因为它有一个超过1555的项目。
总而言之,我如何只选择所有项目都超过特定日期的线程ID?
感谢您的时间!
答案 0 :(得分:22)
SELECT thread_id FROM table GROUP BY thread_id HAVING MAX(date) < 1555
答案 1 :(得分:5)
使用HAVING子句。这允许你过滤像SUM,MAX这样的聚合......在这里你只想选择最新条目早于1555的那些线程id,所以你写:
SELECT * FROM table
GROUP BY thread_id
HAVING MAX(date) < 1555
ORDER BY date DESC