4

我对处理 DB2 很陌生——在 IBM AS400 上。

我运行了以下查询:

SELECT *                                                         
FROM mytable
WHERE ID = 1963003909     

这是查询的结果:

     ID    WK END DT  VRSN    AMT  
 -----------  ----------  ------  ------------  
  1963003909  2012-03-24       1          0.00  
  1963003909  2012-03-31       1          0.00  
  1963003909  2012-04-07       1          0.00  
  1963003909  2012-04-14       1          0.00  
  1963003909  2012-04-21       1          0.00  
  1963003909  2012-04-28       1          0.00  
  1963003909  2012-05-05       1          0.00  
  1963003909  2012-05-12       1          0.00  
  1963003909  2012-05-19       1          0.00  
  1963003909  2012-05-26       1          0.00  
  1963003909  2012-06-02       1          0.00  
  1963003909  2012-06-09       1          0.00  
  1963003909  2012-06-16       1          0.00  
  1963003909  2012-06-23       1          0.00  
  1963003909  2012-06-30       1          0.00  
  1963003909  2012-07-07       1          0.00  
  1963003909  2012-07-14       1          0.00  
  1963003909  2012-07-21       1          0.00  
  1963003909  2012-07-28       1          0.00  
  1963003909  2012-07-28       2        320.00  

我希望能够修改查询以仅选择 VRSN 列中具有最大值的记录,以便能够将信息放入报告中。

我试图从该站点阅读其他示例,但找不到任何未显示如何从表中删除重复记录的内容。

谢谢

4

2 回答 2

2

现在我面前没有 DB2,但是您应该能够vrsn使用OLAP 函数(ANSI SQL 将它们称为窗口函数)来订购,例如ROW_NUMBER(). 然后根据您的订购选择。从这样的事情开始:

with data(<column_list>, Ranking) as (
select *, ROW_NUMBER() OVER(PARTITION BY id ORDER BY vrsn desc) as Ranking
from mytable
)
select * from data where Ranking = 1

基本上,DB2 会将数字 1 分配给vrsnevery id、 on 和 on 最高的行,并且不同的 OLAP 函数将以vrsn不同的方式打破平局。

于 2012-10-22T20:42:45.933 回答
1

看看这是否适合你:

SELECT *
FROM mylibrary.mytable
WHERE ID = 1963003909 AND VRSN = (SELECT MAX(VRSN) FROM mylibrary.mytable)

您没有在示例中显示库名称,但我有。

于 2012-10-22T20:24:04.017 回答