2012-10-22 32 views
4

在IBM AS400上,我是处理DB2的新手。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列可以将信息放入报告中。

我试图从这个网站读取其他例子,但找不到如何从表中删除重复记录的任何东西。

感谢

回答

1

看看这会为你工作:

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

你没有显示在你的榜样库的名字,但我有。

+0

感谢您的帮助。我试图运行该查询,但没有得到任何结果。我最终采取了简单的方法,修改了查询以使VRSN降序,然后将ID和Week结束日期存储在单独的存储字段中,并检查与查询字段相比较的字段。如果这些字段相同,我可以跳过将该行移到我的报告中。不过谢谢。 – user1766002

+0

你有任何类型的错误信息?我在AS/400上运行了这个确切的查询,我在这里和它的工作 - 我用不同的数据表对其运行的数据表进行比较,但我所做的更改是列名... –

+0

没有错误信息,只是没有显示数据查询。 – user1766002

2

我没有在我面前DB2现在,但你应该能够使用OLAP function(ANSI SQL调用它们窗口功能)如ROW_NUMBER()通过vrsn订购。然后根据您的订购选择。开始是这样的:

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到行最高vrsn为每id,和和,和不同的OLAP功能会以不同的方式打破僵局的vrsn

+0

感谢您的信息。就像我在原文中提到的那样,我在DB2上很新,所以你在回复中提出的很多内容都在我的头上。 – user1766002