2015-06-15 94 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'。 –