我有下表:
THE_TABLE:
Fname | Lname | Value | Date
John Doe 200 20
John Doe 300 21
John Blah 200 19
John Blah 400 21
select Fname,Lname,max(value) from THE_TABLE group by Fname,Lname;
这仍然打印出所有内容而不是:
John Doe 300 21
John Blah 400 21
如何根据Fname和Lname打印出具有最大值的记录?
编辑:是否可以在where语句中包含max?例如:where value=max(value)
答案 0 :(得分:0)
如果您希望记录具有分组最大值,那么您必须做更多工作。一种方法是计算每组的最大值,然后将结果加入。还有另一种方法不使用group by
,可以更好地利用索引。这使用not exists
:
select tt.*
from the_table tt
where not exists (select 1
from the_table tt2
where tt2.fname = tt.fname and tt2.lname = tt.lname and
tt2.value > t.value
);
这是有效的,因为每个名称的最大值都有一个很好的属性。没有其他同名的值更大。此查询可以利用the_table(fname, lname, value)
;
答案 1 :(得分:0)
您的查询工作正常。这是我做过的一项实验:
drop table abc;
create table abc as
select 'ab' fname,'b' lname,100 value
union
select 'ab','b',200
union
select 'cb','c',500
union
select 'cb','c',600;
select fname, lname, max(value) from abc group by fname,lname;
-- RESULT
=============
fname lname max(value)
ab b 200
cb c 600
请检查您的表格及其数据类型。