mysql取出每個分組中最新的記錄

2021-06-22 01:28:48 字數 1487 閱讀 9244

mysql取出每個分組中最新的記錄

mysql的gruop by分組功能沒有排序功能,所以我們如果想取出某個分組下的最新記錄是不太容易的,下面介紹兩種方法,一種是通過子查詢,一種是通過group_concat函式來實現。

一、表結構及資料插入

#表的結構 `test3`

create table if not exists `test3` (

`id` int(11) not null auto_increment,

`bid` int(11) not null,

`cid` int(11) not null,

`dtime` datetime not null,

primary key (`id`)

) engine=innodb default charset=latin1 auto_increment=6 ;

#轉存表中的資料 `test3`

insert into `test3` (`id`, `bid`, `cid`, `dtime`) values

(1, 1, 3, 』2014-03-18 16:00:00′),

(2, 1, 10, 』2014-03-18 17:00:00′),

(3, 2, 5, 』2014-03-18 18:00:00′),

(4, 2, 6, 』2014-03-18 19:00:00′),

(5, 1, 7, 』2014-03-18 20:00:00′);

如下圖:

二、通過子查詢實現

1、sql語句

select * from(select * from test3 order by dtime desc) as temp group by  bid order by dtime desc;

2、結果如下圖

三、通過group_concat函式

1、完整的語法

group_concat([distinct] 要連線的字段 [order by asc/desc 排序字段] [separator '分隔符'])

作用:將要連線的字段按照排序欄位的順序用分隔符連起來顯示,預設分隔符是」,」。

2、sql語句

select substring_index(group_concat(id order by `dtime` desc),』,',1) as id, substring_index(group_concat(bid order by `dtime` desc),』,',1) as bid,substring_index(group_concat(cid order by `dtime` desc),』,',1) as cid,substring_index(group_concat(dtime order by `dtime` desc),』,',1) as dtime from `test3` group by bid;

3、結果如下圖

兩上結果是一致的,雖然mysql自身的group by沒有排序功能,但是通過自已的思考還是有辦法的,寫此作為備忘吧。

記錄 T SQL 分組排序中取出最新資料

原文 記錄 t sql 分組排序中取出最新資料 示例 product 表結構 示例 product 表資料 想要的效果是,以 groupname 字段分組,取出分組中通過 sort 降序最新的資料,通過示例資料,可以推算出結果資料的 id 應該為 7 5 3。示例 sql select from p...

記錄 T SQL 分組排序中取出最新資料

示例 product 表結構 示例 product 表資料 想要的效果是,以 groupname 字段分組,取出分組中通過 sort 降序最新的資料,通過示例資料,可以推算出結果資料的 id 應該為 7 5 3。示例 sql select from product p where id select...

Mysql查詢每個分組中最大值的整條資料

表tmp中記錄的是人員享受補貼的記錄,每個人會有多條不同時間的享受記錄,現在需要查詢每個人最後一次享受補貼的記錄 select a.from tmp a inner join select max issuing date as max issuing date,s.identity card fr...