我想在MySQL中选择每个GROUP BY
聚合的最后一行。
例如,如果我写GROUP BY foo
,并且两行有foo = 'bar'
,我想选择这两个行的最后一行(按id
排序)(我想要选择每个聚合子句中最后一行的message
列,按id
和GROUP
foo
排序。
我该怎么做?
表定义,按要求:
+-----------------+
| id foo message |
+-----------------+
| 1 bar hey |
| 2 joe hi |
| 3 bar hello |
+-----------------+
我希望得到以下内容:
+-------------+
| foo message |
+-------------+
| bar hello |
| joe hi |
+-------------+
它给了我hello
,因为hello
是foo = 'bar'
的最后一行,按id
排序。
答案 0 :(得分:3)
以下是查询:
SELECT
footable.foo,
footable.message
FROM footable
INNER JOIN
(
SELECT
foo,
MAX(id) max_id
FROM footable
GROUP BY foo
) AS t
ON footable.foo = t.foo AND footable.id = t.max_id
ORDER BY footable.id DESC;
在给定输入上运行查询,您将获得如下输出:
| foo | message |
|-----|---------|
| bar | hello |
| joe | hi |
答案 1 :(得分:1)
使用IN
和子查询:
select *
from yourtable
where (id, foo) in (
select max(id), foo from yourtable group by foo
)