日期:2014-05-18  浏览次数:20828 次

聚合函数MAX的使用
已有人发过此问题了,回复的答案并没有解决实际问题。
我想把     wumingcnd       的问题再发一次。
name [date]  balance      
    张三 2002-1-1 80      
    张三 2002-5-1 200      
    张三 2002-7-1 100      
    李四 2002-8-1 70      
    李四 2002-9-1 90      
    李四 2002-10-1       100      
    王五 2001-1-1 300      
    王五 2002-1-1 200      
    王五 2003-1-1 100      
       
    我想查出来每个人(name)   最后一天([date])   的   金额(balance),怎么查?      
       
    目标数据就是这样的:      
    name [date]  balance      
    张三 2002-7-1 200      
    李四 2002-10-1       100      
    王五 2003-1-1 300      

回复的答案是:

select       *       from       table          
    where       date       in       (select       max(data)       from       table       group       by       name)

但是在实际应用中,查询结果确是:

    张三 2002-1-1 80      
    张三 2002-5-1 200      
    张三 2002-7-1 100      
    李四 2002-8-1 70      
    李四 2002-9-1 90      
    李四 2002-10-1       100      
    王五 2001-1-1 300      
    王五 2002-1-1 200      
    王五 2003-1-1 100  


希望高手大虾们能够帮帮忙,先谢谢啦......




------解决方案--------------------
select * from [table] a where not exists(select 1 from [table] where name=a.name and [date]> a.[date])
------解决方案--------------------
建表
CREATE TABLE tb ( name varchar(10),[date] datetime,balance decimal)

初始化数据
insert into tb select '张三 ', '2002-1-1 ',80
union all select '张三 ', '2002-5-1 ',200
union all select '张三 ', '2002-7-1 ',100
union all select '李四 ', '2002-8-1 ',70
union all select '李四 ', '2002-9-1 ',90
union all select '李四 ', '2002-10-1 ',100
union all select '王五 ', '2001-1-1 ',300
union all select '王五 ', '2002-1-1 ',200
union all select '王五 ', '2003-1-1 ',100


跟据你的描述: 我想查出来每个人(name) 最后一天([date]) 的 金额(balance),怎么查?
得到以下SQL语句:
select * from tb where date in (select max([date]) from tb group by [name])


结果:
name date balance
---------- ------------------------------------------------------ --------------------
张三 2002-07-01 00:00:00.000 100
李四 2002-10-01 00:00:00.000 100
王五 2003-01-01 00:00:00.000 10