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...