我有一个临时表,我是从一个更大的表中派生出来的。
+-----+----------+---------+
| id | phone | attempt |
+-----+----------+---------+
| 1 | 12345678 | 15 |
| 2 | 87654321 | 0 |
| 4 | 12345678 | 16 |
| 5 | 12345678 | 14 |
| 10 | 87654321 | 1 |
| 11 | 87654321 | 2 |
+-----+----------+---------+
我需要找到与每个电话号码上最高尝试次数相对应的ID(唯一)。电话和尝试并不是唯一的。
SELECT id, MAX(attempt) FROM temp2 GROUP BY phone
上述查询不会返回相应最大尝试次数的ID。
答案 0 :(得分:3)
试试这个:
select
t.*
from temp2 t
inner join (
select phone, max(attempt) attempt
from temp2
group by phone
) t2 on t.phone = t2.phone
and t.attempt = t2.attempt;
它将返回给定数字的最大尝试次数。
请注意,如果手机有多行,如果尝试次数与该手机的最大尝试次数相同,则会返回多个ID。
答案 1 :(得分:2)
作为@GurV给出的答案的替代方法,您还可以使用相关子查询来解决此问题:
SELECT t1.*
FROM temp2 t1
WHERE t1.attempt = (SELECT MAX(t2.attempt) FROM temp2 t2 WHERE t2.phone = t1.phone)
这样做的好处是不那么冗长。但我可能会选择加入选项,因为它可以更好地扩展到大型数据集。