场景:
tableT
userid 用户id
balance 用户余额
optdate 操作时间
查找出某个时段(比如2011-11-10以前)的所有账户总余额
分析:
该表记录了历史操作记录, 由于余额和时间有关, 所以同一个userid,需要取最新(最晚,最大)的optdate对应的balance
可以使用oracle分析函数: row_number() over()
结果:
select *
from (select userid,
balance,
optdate,
row_number() over(partition by userid order by userid, optdate desc) rn
from tableT
where optdate <
to_date('2011-11-10 00:00:00', 'yyyy-mm-dd hh24:mi:ss'))
where rn = 1
使用该函数避免了groupby之后还要做子查询.
有关该函数的用法,可以参考:
http://hi.baidu.com/%D3%F4%C3%C6%BB%A8%C9%FA%BD%B4/blog/item/66b3c1dcff3ce4e976c638df.html
不知道mysql下怎么办呢?