从第二列排序的子组中获取每个第一个元素

时间:2015-06-15 19:13:55

标签: sql sql-server

我有两列列出的数据如下:

X | Y
--+---
A | 4  
A | 2  
A | 0  
B | 3  
B | 2  
B | 1

我想构建我的SQL查询,以便输出:

X | Y
--+---
A | 4  
B | 3  

任何提示?

SELECT
    table1.X, 
    max(table2.Y)
FROM 
    table1
INNER JOIN 
    table2
ON table1.X = table2.X
ORDER BY 
    table1.X, 
    table2.Y DESC;

2 个答案:

答案 0 :(得分:3)

SQL表代表无序集,因此没有"第一个"组中的行,除非列指定了排序。

从您的示例数据中,只需一个简单的max()即可获得所需的结果:

select x, max(y)
from table t
group by x;

答案 1 :(得分:0)

你也可以像这样使用ROW_NUMBER

SELECT
    x, y
FROM (
    SELECT 
        t1.x, t2.y,
        ROW_NUMBER() OVER (PARTITION BY t1.x ORDER BY t1.x, t2.y DESC) as seq
    FROM
        table1 t1
        JOIN 
        table2 t2 ON t1.x = t2.x) t
WHERE
    (seq = 1)

seqt1.xt2.y DESC排序,并通过更改t1.x进行重置。