2015-10-20 223 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将其作为新列插入(如果这是您之后的情况)。

相关问题