萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> sql分組取最大記錄方法

sql分組取最大記錄方法

要想取利用group by 分組後第一條記錄我們就需要結合order by 來操作,原是是很利用group by 把所有分組取出來,然後來利用order by 對分組裡面的數據進行desc排序取第一條就KO了。

先看看group by 語句的用法


GROUP BY 語句
GROUP BY 語句用於結合合計函數,根據一個或多個列對結果集進行分組。

SQL GROUP BY 語法 點擊可查看源文

 代碼如下 復制代碼

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name


在SQL的 語句一起使用同樣數目的SQL聚合函數提供分組的某些數據庫教程表列(第結果數據集方法)。


實例

以下是 test 表,測試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, 'www.111cn.net', 20120308, 1),
(2, 2321, 20120309, 2),
(3, 1236, 20120310, 3),
(5, 'www.111cn.net', 20120309, 1),
(6, 2312, 20120310, 1),
(7, 1432, 20120311, 1),
(8, 2421, 20120308, 2),
(9, 4245, 20120311, 2),
(10, 'www.111cn.net', 20120310, 2),
(11, 412, 20120308, 3);

實現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排序的第一條就可以了。


再看個mssql server實例

 

例如 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分組,在每個分組中取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)


好了就講這麼多了,希望對大家有用。

copyright © 萬盛學電腦網 all rights reserved