读书人

聚合函数MAX的使用解决思路

发布时间: 2012-03-06 20:47:55 作者: rapoo

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


跟据你的目标数据


目标数据就是这样的:
name [date]  balance
张三 2002-7-1 200
李四 2002-10-1 100
王五 2003-1-1 300


得出这样的SQL语句:
select a.[name],a.[date],b.balance
from(select [name] as [name],max([date]) as [date] from tb group by [name])a
INNER JOIN(
select [name] as [name],max(balance) as [balance] from tb group by [name]
) b ON a.[name]=b.[name] order by a.[date],b.[balance]

得出目标结果:

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

读书人网 >SQL Server

热点推荐