获取每组行的最大值的正确ID

时间:2017-10-22 17:10:26

标签: mysql max

从一个包含三行(id,status,value)的简单表中,我想为每个状态组检索具有最大值的行中的id和值。

我尝试的简单查询是:

SELECT t1.status, t1.id, MAX(t1.value) FROM t1
GROUP BY t1.status;

问题是我确实为每个组获得了最大值,但没有得到正确的id。我从每个状态组获得第一行的id ... 有没有一种简单的方法来获得正确的身份?

关于获得最大值有很多问题,但关于id的问题并不多。无法找到那个答案..

4 个答案:

答案 0 :(得分:0)

您需要按t1.status进行分组,t1.id使用以下查询 -

SELECT t1.status, t1.id, MAX(t1.value) FROM t1
GROUP BY t1.status,t1.id;

答案 1 :(得分:0)

尝试使用子查询来获取具有最大值的id:

   SELECT a.status, (select b.id
                       FROM t1 as b
                       where b.status=a.status
                       group by b.status
                       HAVING b.value=max(b.value)), 
           MAX(a.value) 
    FROM t1 as a
    GROUP BY a.status;

答案 2 :(得分:0)

我比评论中的内容更好。不是最有效但应该完成工作:

WITH maxes(max) as (
    SELECT MAX(t1.value), t1.status
    FROM t1
    GROUP BY t1.status),
SELECT t1.status, t1.id, t1.value
   FROM t1, maxes
   WHERE t1.value = maxes.max AND t1.status = maxes.status;

答案 3 :(得分:0)

这个解决方案对我有用:

SELECT v.status, v.id, v.value
 FROM 
(SELECT statues, MAX(value) AS maxVal
FROM t1
GROUP BY status) as m
INNER JOIN t1 v
ON v.status = m.status 
AND v.value = m.maxVal; 

谢谢!