假如有这么一个表
+------+-------+--------------------------------------+
| id | val | field1 | field2 | |
+------+-------+--------------------------------------+
| 1 | 1 | ... | ... |
| 2 | 1 | ... | ... |
| 1 | 2 | ... | ... |
| 1 | 3 | ... | ... |
+------+-------+--------------------------------------+
我想得到按照id进行groupby之后val最大的行,结果为
+------+-------+--------------------------------------+
| id | val | field1 | field2 | |
+------+-------+--------------------------------------+
| 2 | 1 | ... | ... |
| 1 | 3 | ... | ... |
+------+-------+--------------------------------------+
这该如何操作?
下面的操作只能得到val的最大值,忽视了其他的字段,我需要整行的信息
SELECT id, MAX(value) FROM my_table GROUP BY id
谢谢!
1个回答
两种方法
第一种方法比较直接,先groupby挑出最大的,然后再回到原来的表里找到最大值所在的行
SELECT a.*
FROM YourTable a
INNER JOIN (
SELECT id, MAX(val) rev
FROM YourTable
GROUP BY id
) b ON a.id = b.id AND a.val = b.val
第二种方法比较机智,让自己和自己做join,但是要求左边的表中val的数值小于右表中的val,否则就为空。显然空着行就是val取最大值的行
SELECT a.*
FROM YourTable a
LEFT OUTER JOIN YourTable b
ON a.id = b.id AND a.val < b.val
WHERE b.id IS NULL;