2012-10-22 30 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