我很擅长在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列中具有最大值的记录,以便能够将信息放入报告中。
我曾尝试从此网站阅读其他示例,但找不到任何未显示如何从表中删除重复记录的内容。
由于
答案 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)
您没有在示例中显示库名,但我有。