[英]MySQL: Select last row in each aggregate group
我想選擇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
排序。
這是查詢:
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 |
使用IN
和子查詢:
select *
from yourtable
where (id, foo) in (
select max(id), foo from yourtable group by foo
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.