首页 > sql使用聚合函数之后,怎么获取得到的该条记录?

sql使用聚合函数之后,怎么获取得到的该条记录?

比如:

userid      date        money
  1       '2015-6-30'   500
  2       '2015-7-30'   100
  2       '2015-8-30'   100
  1       '2015-5-30'   500
  3       '2015-8-30'   900
  2       '2015-9-30'   100
  1       '2015-3-30'   400
  

使用聚合函数 MAX(date) 得到最晚的时间.
但是如果要获取userid和money的话就需要分组,不然数据会不准确(这点我测过),但是会出现多条数据.
如何才能得所有不同的userid最晚的这条记录,得到这样的:

userid      date        money
 1        '2015-6-30'    500
 2        '2015-9-30'    100
 3        '2015-8-30'    900

理论上来说,你这个需求是不合理的(或是不完全的)

你可能是想得到:

select userid, date, money
from your_table_name
where date = (select max(date) from your_table_name)

如果你的数据中,每一天只会有一个userid和money,其实这样出来就是一条数据了。

--for mysql
select userid, `date`, `money`
from your_table_name
order by `date` desc
limit 1

--for ms sql server,碰到语法错误可能会是字段与关键字重复,可以加上[]
select top 1 userid, [date], [money]
from your_table_name
order by [date] desc

--其它数据库限制结果集的方法可以自己baidu
userid    date         money
1         '2015-1-1'     330.00
2         '2015-1-1'     660.00

依这样的数据,你用方法2出来的可能是随机的一条,除非你加上order by userid...碰到同一userid同一天有多条,无解了。

所以,这时候,你需要考虑修改你的表结构。比如增加一个序号字段,可以是数据库的自增、或是按日期+流水号。

先这些吧。期待你把你的问题再补充一下。


SELECT * FROM (
    SELECT * FROM money m ORDER BY m.`date` DESC
    ) t GROUP BY t.userid


我测试通过

mysql> select a.* from (select max(date) dates ,userid,money from moneys group by userid
,money) b,moneys a where a.userid=b.userid and a.money=b.money and a.date=b.dates;
【热门文章】
【热门文章】