要想取利用group by 分組后第一條記錄我們就需要結(jié)合order by 來操作,原是是很利用group by 把所有分組取出來,然后來利用order by 對(duì)分組里面的數(shù)據(jù)進(jìn)行desc排序取第一條就KO了.
先看看group by 語句的用法
GROUP BY 語句,GROUP BY 語句用于結(jié)合合計(jì)函數(shù),根據(jù)一個(gè)或多個(gè)列對(duì)結(jié)果集進(jìn)行分組.
SQL GROUP BY 語法,代碼如下:
- SELECT column_name, aggregate_function(column_name)
- FROM table_name
- WHERE column_name operator value
- GROUP BY column_name
在SQL的 語句一起使用同樣數(shù)目的SQL聚合函數(shù)提供分組的某些數(shù)據(jù)庫教程表列,第結(jié)果數(shù)據(jù)集方法,實(shí)例,以下是 test 表,測(cè)試sql,代碼如下:
- CREATE TABLE IF NOT EXISTS `test` (
- `id` int(10) unsigned NOT NULL auto_increment,
- `install` int(10) unsigned NOT NULL,
- `day` int(10) unsigned NOT NULL,
- `aid` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;
- INSERT INTO `test` (`id`, `install`, `day`, `aid`) VALUES
- (1, 'm.survivalescaperooms.com', 20120308, 1),
- (2, 2321, 20120309, 2),
- (3, 1236, 20120310, 3),
- (5, 'm.survivalescaperooms.com', 20120309, 1),
- (6, 2312, 20120310, 1),
- (7, 1432, 20120311, 1),
- (8, 2421, 20120308, 2),
- (9, 4245, 20120311, 2),
- (10, 'm.survivalescaperooms.com', 20120310, 2),
- (11, 412, 20120308, 3);
實(shí)現(xiàn)sql語句,代碼如下:
- SELECT A.* FROM test A,
- (SELECT aid, MAX(day) max_day FROM test GROUP BY aid) B
- WHERE A.aid = B.aid AND A.day = B.max_day
- ORDER BY a.install DESC
這樣我們只要取集合的還desc排序的第一條就可以了.
再看個(gè)mssql server實(shí)例,例如 table1(a,b,c,d),代碼如下:
- a b c d
- 1 0 c1 d1
- 1 1 c2 d2
- 1 3 c3 d3
- 4 0 c4 d4
- 5 1 c5 d5
- 5 2 c6 d6
- 6 1 c7 d7
- 6 4 c8 d8
我要得到的是按a分組,在每個(gè)分組中取b值最大的一條記錄,就是如下:
- a b c d
- 1 3 c3 d3
- 4 0 c4 d4
- 5 2 c6 d6
- 6 4 c8 d8
方法一,代碼如下:
select * from table1 where b in (select max(b) from table1 group by a) ;
方法二,代碼如下:
select * from table1 a where b=(select max(b) from table1 where a=a.a)
好了就講這么多了,希望對(duì)大家有用.
新聞熱點(diǎn)
疑難解答
圖片精選