我对在 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/