2012-08-03 111 views
0

如果查询返回多个结果,我需要在我选择的位置获取最新(id)行的条件。 (IBM DB2)SQL - 如果结果集包含多个行,则返回最新(id)结果

即:

ID--NUM1--COUNTRY--NUM2 

1--123--SE--123 

2--123--US--123 

而是有两排回到我想有2行返回。

编辑:

我的查询看起来像现在这样:

SELECT LET1.INSTANCE_ID, COU.CODE, SUP1.SUPPLIERID, PAR.PARTNUMBER 

FROM  TABLES 

WHERE TABLEJOIN_CONDITIONS 

AND  TABLE.COLUMN IN ('11994', '12345' and so on) 

但这种查询可以返回重复的行。

像:

ID--NUM1--COUNTRY--NUM2 

1--123--SE--11994 (11994 appearing twice, then I want the latest row which is row number 2) 

2--123--US--11994 
+0

所以你想要最大的ID行? – 2012-08-03 12:01:19

+0

@AlexK正好! – 2012-08-03 12:05:09

回答

0

排序在descendng顺序编号,并只获得第一个记录。

我不掌握最新的DB2语法,但类似:

SELECT id, num1, country, num2 
FROM SomeTable 
ORDER BY ID DESC 
FETCH FIRST 1 ROW ONLY 
+0

这当然假定他直接查询每个'num1' /'country' /'num2',或者只给他一行_total_,而不是每个元组一行。 – 2012-08-03 16:22:25

0

我有点困惑上的数字让“独一无二”的,但如果你只是想在最新的ID为每个NUM1, NUM2组合,那么你可以这样做:

SELECT * 
FROM (
    SELECT A.*, 
      ROW_NUMBER() OVER (PARTITION BY NUM1, NUM2 ORDER BY ID DESC) AS RN 
    FROM YOUR_TABLE A 
) 
WHERE RN = 1 

子选择将由ID分配每个num1行号,num2组合,为了它,只能挑了冷杉该组合的第st行。