无法从mysql中的记录中打印出最大值

时间:2014-07-31 18:10:26

标签: mysql sql

我有下表:

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)

2 个答案:

答案 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

请检查您的表格及其数据类型。