2012-10-03 93 views
1

我們有一個要求,像通過過濾一列的不同值以及另一列的最大值來獲取表的所有列。提取一列的不同值以及另一列的最大值的記錄

實施例:

Table A 

id name qty 
__ __ __ 

1 Dinesh 10 
2 Ramesh 8 
3 Dinesh 2 
4 Ganesh 3 
5 Ganesh 20 

在這裏,最大(數量)沿抓取不同名稱;

預期輸出:

1 Dinesh 10 
2 Ramesh 8 
5 Ganesh 20 

任何人都可以說,如何在DB2查詢實現這一目標?

在此先感謝

回答

2

您可以使用相關的子查詢來執行此操作。

SELECT T.id, T.name, T.qty 
FROM tableA T 
WHERE T.qty = (
    SELECT MAX(qty) 
    FROM tableA 
    WHERE name = T.name 
) 

但請注意,如果使用相同的名稱和最大數量(如6 Dinesh 10)另一條記錄,然後兩個記錄將被退回。

SELECT T.id, T.name, T.qty 
FROM tableA T 
WHERE NOT EXISTS (
    SELECT 1 
    FROM tableA 
    WHERE name = T.name 
     AND qty > T.qty 
     OR (id > T.id AND qty = T.qty) 
    ) 
+0

他說他需要不同的值,這不是第一種情況。另外在第二種情況下按照你的方式,你不能只在選擇上使用'獨特'嗎? – MazarD

+2

@MazarD - 每行都有一個唯一的id,因此使用'DISTINCT'會因此返回每一行。我看到你在說什麼,並會工作,如果只需要名稱和數量列所需 – acatt

+0

你是對的,謝謝,我編輯我的答案:) – MazarD

1

//編輯:在acatt評論我瞭解需求之後...

另一種選擇是:

SELECT t.id, t.name, t.qty 
    FROM tableA t 
WHERE (t.name, t.qty) in (
    SELECT q.name, max(q.qty) 
    FROM tableA q 
    group by q.name 
) 

而且這可以編寫查詢略有不同解決考慮到所有具有相同名稱和數量的行將被退回

+0

我得到'SQLCODE = -122,錯誤:如上所述執行查詢時,選擇列表中的列或表達式不是有效的。 – Dinesh

相關問題