聚合函数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