我有一个这样的表recipients

Id    user_id   thread_id
_________________________
1     1215      3833
2     1215      3833
3     1862      3833
........................

10    1215      3834
11    1862      3834


我有一个带有一些值的数组(user_id)。对于每个值,这就是我的user_id -s,我想选择最大thread_id。对于单个给定值(例如1215),我可以通过此简单查询获取值

query = "SELECT MAX(thread_id) FROM recipients WHERE user_id = 1215 "


但是当我尝试写这样的东西时,我不能用它从表中获取所有最大的thread_id-s

query = "SELECT MAX(thread_id) FROM recipients WHERE user_id IN (1215,1862,1799)"


我想知道是否可以通过单个查询获得给定数组的所有最大值(无需使用for或foreach并为数组的每个值运行查询)。
谢谢 !

最佳答案

您需要使用带有聚集函数的GROUP BY来对它们进行分组,对于第一个查询,其中有一个用户的where子句,因此它将提供您的最大线程ID,但是在第二个查询中,您有3个用户ID,因此您需要对它们进行分组获得每个用户3个最大线程ID

SELECT MAX(thread_id)
FROM recipients
WHERE user_id IN (1215,1862,1799)
 GROUP BY user_id


fiddle demo

GROUP BY (Aggregate) Functions

10-07 17:24