我有一个这样的表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