2015-10-20 47 views
0

我有一個db2查詢,它必須獲取列(Col6)的第一個值。我曾嘗試使用列的最小值,但它以升序獲取第一個值。DB2查詢以獲取組中的第一個值

表如下:

Col1 Col2 Col3 Col4 Col5 Col6 
10  -1  N/A  1  41  Pack Inv 
10  -1  N/A  1  10  Fl Sales 
10  -1  N/A  1  10  St Ss Bu 
10  -1  N/A  1  41  Pack Inv 

爲COL7預期的輸出如下所示:

Col1 Col2 Col3 Col4 Col5 Col6  Col7 
10  -1  N/A  1  41  Pack Inv Pack Inv 
10  -1  N/A  1  10  Fl Sales Pack Inv 
10  -1  N/A  1  10  St Ss Bu Pack Inv 
10  -1  N/A  1  41  Pack Inv Pack Inv 

通過使用MIN(COL6)OVER(PARTITION BY Col1中)AS 「COL7」,生成的輸出是:

Col1 Col2 Col3 Col4 Col5 Col6  Col7 
10  -1  N/A  1  41  Pack Inv Fl Sales 
10  -1  N/A  1  10  Fl Sales Fl Sales 
10  -1  N/A  1  10  St Ss Bu Fl Sales 
10  -1  N/A  1  41  Pack Inv Fl Sales 

我可以知道如何在db2中實現預期輸出。

謝謝

+0

「First」根據什麼順序?哪一列確定特定Col1值在一組行中的所需順序?如果您沒有指定順序,那麼DB2將不保證返回的行的順序。 – WarrenT

回答

0

雖然目前尚不清楚「第一」列如何在您的數據定義,這個普遍的問題是解決了與row_number()排名列,然後選擇第一個:

with ranked as (
    select col1, 
     col6, 
     row_number() over (partition by col1 order by [cols that define "first"]) rank 
) 
select col1, col6 from ranked where rank=1 

如果要將選定值添加到每一行,則可以將此結果加回原始表中,或者使用merge將其作爲新列插入(如果這是您之後的情況)。

相關問題