2015-06-15 62 views
0

我已下令由两列数据的模样有序子组每次取第一个元素:从第二列

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; 

回答

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) 

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

+0

这最终与我需要的另一个过滤器非常吻合。谢谢 –

2

SQL表代表无序套,所以没有“第一”行的概念的组中,除非一个列指定的排序。

从你的样本数据,但是,一个简单的max()就足以获得期望的结果:

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

嘿,谢谢你的回复。所以它似乎应该工作,但我已经提供了上面的代码示例,以显示实际正在发生的事情。建议添加max()会给出错误“不是单组功能” –

+0

@JakeSpracher。 。 。你需要在你的查询中包含'group by x'。 –