从一个包含三行(id,status,value)的简单表中,我想为每个状态组检索具有最大值的行中的id和值。
我尝试的简单查询是:
SELECT t1.status, t1.id, MAX(t1.value) FROM t1
GROUP BY t1.status;
问题是我确实为每个组获得了最大值,但没有得到正确的id。我从每个状态组获得第一行的id ... 有没有一种简单的方法来获得正确的身份?
关于获得最大值有很多问题,但关于id的问题并不多。无法找到那个答案..
答案 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;
谢谢!