日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...

發(fā)布時間:2023/12/2 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

比如當前有如下的消息表(messages)及示例數據:

Id Name Other_Columns

-------------------------

1 A A_data_1

2 A A_data_2

3 A A_data_3

4 B B_data_1

5 B B_data_2

6 C C_data_1

按照以下SQL語句查詢:

select * from messages group by name

得到的查詢結果為:

1 A A_data_1

4 B B_data_1

6 C C_data_1

如何使用SQL語句查詢每個分組的最后一條數據,如:

3 A A_data_3

5 B B_data_2

6 C C_data_1

方案一SELECT m1.*

FROM messages m1 LEFT JOIN messages m2

ON (m1.name = m2.name AND m1.id < m2.id)

WHERE m2.id IS NULL;

如果中MySQL 8.0中,可以使用 WITH 的語法(WITH語法文檔),具體實現SQL語句如下:

WITH ranked_messages AS (

SELECT m.*, ROW_NUMBER() OVER (PARTITION BY name ORDER BY id DESC) AS rn

FROM messages AS m

)

SELECT * FROM ranked_messages WHERE rn = 1;

方案二

使用子查詢

select

a.*

from

messages a

inner join

(select name, max(id) as maxid from messages group by name) as b on

a.id = b.maxid

如果不是以 id 列排序的,則指定其他列即可,如:

select

a.*

from

messages a

inner join

(select name, max(other_col) as other_col

from messages group by name) as b on

a.name = b.name

and a.other_col = b.other_col

方案三SELECT

Id, Name, OtherColumns

FROM messages

WHERE NOT EXISTS (

SELECT * FROM messages as M2

WHERE M2.Name = messages.Name

AND M2.Id > messages.Id

)

方案四SELECT jos_categories.title AS name,

joined .catid,

joined .title,

joined .introtext

FROM jos_categories

INNER JOIN (SELECT *

FROM (SELECT `title`,

catid,

`created`,

introtext

FROM `jos_content`

WHERE `sectionid` = 6

ORDER BY `id` DESC) AS yes

GROUP BY `yes`.`catid` DESC

ORDER BY `yes`.`created` DESC) AS joined

ON( joined.catid = jos_categories.id )

方案五SELECT

`Id`,

`Name`,

SUBSTRING_INDEX(

GROUP_CONCAT(

`Other_Columns`

ORDER BY `Id` DESC

SEPARATOR '||'

),

'||',

1

) Other_Columns

FROM

messages

GROUP BY `Name`

總結

以上是生活随笔為你收集整理的mysql分组区某列最后一条_[MySQL]MySQL数据库如何按某列分组排序后查询每个分组的最后一条数据?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。