Oracle分析函数: row_number() over()
场景:
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下怎么办呢?
-------------我的签名档---------------------
年轻人,还需要多努力!
--------------------------------------------