2014-10-03 97 views
1

我有如下表:如何根据一列的最大值选择表中不同的数据?

A  B   C  D   E  F 
James Michael 123  Hello  World 1 
James Michael 123  Hello  World 5 
James Michael 123  Hello  World 7 
Harold Reynolds 345  There  Poop  1 
John  Lowland 555  Woh  Pop  1 
Howard Yow  255  Man  That  1 

我希望能够基于F的MAX值来选择所有行

的结果应该是:

James Michael 123  Hello  World 
Harold Reynolds 345  There  Poop  
John  Lowland 555  Woh  Pop  
Howard Yow  255  Man  That  

回答

3

你可以用ROW_NUMBER()功能做到这一点:

;with cte AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY "C" ORDER BY "F" DESC) AS RN 
       FROM Table1) 
SELECT "A", "B", "C", "D", "E" 
FROM cte 
WHERE RN = 1 

Demo :SQL Fiddle

ROW_NUMBER()函数生成一个数从1开始对各组中的PARTITION BY条款(可选)利用字段的每行和顺序由ORDER BY条款(必需)确定。

注意:我假设您的C字段足以识别一行,但如果不是这种情况,您可能需要将字段添加到PARTITION BY子句。

2

我们可以使用ROW_NUMBER,结果分区和从分区

Select * from 
    (select *, row_number() over ( partition by A, B, C,D ,E order by F desc) as seq from tableA) T 
    Where T.seq =1 
2

只得到1行由于这是第DISTINCT ON是正确的做法:

SELECT * FROM(
    SELECT DISTINCT ON ("A","B","C","D","E") "A","B","C","D","E","F" 
FROM table1 
ORDER BY "A","B","C","D","E","F" DESC) AS q 
ORDER BY "F" DESC; 

外部查询是否有刚把詹姆斯放在首位。

fiddle

相关问题