2012-10-03 64 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

相关问题