比如:
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
理论上来说,你这个需求是不合理的(或是不完全的)
你可能是想得到:
最后一天的userid和money。那最后一天可能会有多个userid和money?
这样的方案就是:
select userid, date, money
from your_table_name
where date = (select max(date) from your_table_name)
如果你的数据中,每一天只会有一个userid和money,其实这样出来就是一条数据了。
你的需求也可能是,找出当天最后一笔。。。你的date只是日期吗?是否包含了时间?如果没有时间,表中是否有其它字段可以反映先后顺序的?假设你的date中是有时间的。。。那么,找出最后一笔(通常,量不是很大的情况下,时间一般不会相同),就不需要聚合函数,只要用排序就好了。
--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
其实这样还是有问题。。。如果你的date只包括日期,每天又有多笔,而你又真的只想显示一笔。比如这样的数据:
userid date money
1 '2015-1-1' 330.00
2 '2015-1-1' 660.00
依这样的数据,你用方法2出来的可能是随机的一条,除非你加上order by userid...碰到同一userid同一天有多条,无解了。
所以,这时候,你需要考虑修改你的表结构。比如增加一个序号字段,可以是数据库的自增、或是按日期+流水号。
先这些吧。期待你把你的问题再补充一下。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。