DB2查询 - 选择特定的重复记录

时间:2012-10-22 18:19:37

标签: db2

我很擅长在IBM AS400上处理DB2。

我运行了以下查询:

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列中具有最大值的记录,以便能够将信息放入报告中。

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

由于

2 个答案:

答案 0 :(得分:2)

我现在没有DB2在我面前,但您应该能够vrsn使用OLAP function(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会为每个vrsn以及之前和之后的id行分配数字1,并且不同的OLAP函数将以不同的方式破坏vrsn中的联系

答案 1 :(得分:1)

看看这是否适合您:

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

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