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

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

谢谢

最佳答案

现在我面前没有 DB2,但是您应该能够使用 OLAP function(ANSI SQL 将它们称为窗口函数)(例如 vrsn)通过 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 的联系。

关于DB2 查询 - 选择特定的重复记录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13017338/

10-16 05:25