簡體   English   中英

MySQL:在每個聚合組中選擇最后一行

[英]MySQL: Select last row in each aggregate group

我想選擇MySQL中每個GROUP BY聚合的最后一行。

例如,如果我編寫GROUP BY foo ,並且兩行都具有foo = 'bar' ,那么我想選擇這兩行的最后一行(按id排序)(我想選擇其中的最后一行的message列)每個聚合子句,分別由idGROUPfoo排序)。

我怎樣才能做到這一點?

表定義,要求:

+-----------------+
| id  foo message |
+-----------------+
| 1   bar hey     |
| 2   joe hi      |
| 3   bar hello   |
+-----------------+

我想要得到以下內容:

+-------------+
| foo message |
+-------------+
| bar hello   |
| joe hi      |
+-------------+

它給我hello ,因為hellofoo = '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;

SQL FIDDLE DEMO

在給定的輸入上運行查詢,您將獲得如下輸出:

| foo | message |
|-----|---------|
| bar |   hello |
| joe |      hi |

使用IN和子查詢:

select *
from yourtable
where (id, foo) in (
    select max(id), foo from yourtable group by foo
)

SQLFiddle演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM