有这样一个工资表
date ¦ name ¦ s(工资)
2008-01-01 ¦ aaa ¦ 100
2008-04-01 ¦ aaa ¦ 80
2008-05-01 ¦ aaa ¦ 200
2008-01-01 ¦ bbb ¦ 230
2008-02-01 ¦ bbb ¦ 300
2008-03-01 ¦ bbb ¦ 40
我想用一条语句找出每个人的最近一次工资。(不考虑添加最近一次的标志字段,仅通过时间来判断)
date ¦ name ¦ s(工资)
2008-01-01 ¦ aaa ¦ 100
2008-04-01 ¦ aaa ¦ 80
2008-05-01 ¦ aaa ¦ 200
2008-01-01 ¦ bbb ¦ 230
2008-02-01 ¦ bbb ¦ 300
2008-03-01 ¦ bbb ¦ 40
我想用一条语句找出每个人的最近一次工资。(不考虑添加最近一次的标志字段,仅通过时间来判断)
select a.* from tt a inner join (
select name,max(date) as ma from tt group by name) b
on a.name=b.name and a.date=b.ma
date ¦ name ¦ s(工资)
2008-05-01 ¦ aaa ¦ 200
2008-03-01 ¦ bbb ¦ 40
http://blog.chinaunix.net/u/29134/showart_465578.html
Group By子句实例讲解 Group By子句主要指出对查询结果分组的依据,通常跟聚合函数(Sum, Max,Min等)一起使用.举个例子:比如我们可以使用SUM函数计算所有商店的销售总额,如果我们希望计算每一家商店各自的总销售额时该怎么办呢?要实现这一目的我们需要做两件事:首先,我们需要查询商店名称和销售额两个字段;然后,我们使用SQL语言的GROUP BY命令将销售额按照不同的商店进行分组,从而计算出不同商店的销售总额。GROUP BY命令的语法格式为:SELECT "column_name1",SUM("column_name2") FROM "table_name" GROUP BY "column_name1" 例 “Sales”表中的原始数据: Company Amount W3Schools 5500
IBM 4500
W3Schools 7100 按照Company字段进行分组,求出每个Company的Amout的合计: SELECT Company,SUM(Amount) FROM Sales GROUP BY Company 返回结果: Company SUM(Amount) W3Schools 12600
IBM 4500 小注: GROUP BY关键字一般应用于同时查询多个字段并对字段进行算术运算的SQL命令中。 Having子句 Having子句跟Where类似,就是专门同Group By一起使用,指出在Group By中的条件。 select Company,sum(Amount) from Sales group by Company having count(Company)>1 W3Schools 12600 小结: Group By语句使用中一般必须有聚合函数,对数据进行分类.Having就是专门用来指定Group By子句中的条件的.
SQL 1992
MySQL 5.1 Reference Manual
ActiveX Data Objects 2.5 Reference 下载
数据库系统概论PPT.
[align=center]==== 思想重于技巧 ====
[/align]
.
贴子分数<20:对自已的问题不予重视。
贴子大量未结:对别人的回答不予尊重。
.
where(x.name=y.name and (x.date=(select max(date) from y where y.name=x.name)))不够专业,请高手分析指正!