最近工作中用到mysql,发现mysql和Oracle差别挺大的,其不像Oracle中存在丰富的分析函数(开窗函数),如rank(),lag(),leaf()等,只能用变量来获取以便达到分析函数的效果,具体使用方法如下:

eg:

想通过member id进行分组,获取每个用户最新首次操作的时间,实际上就是根据member id分组后取出最早的一条,但是由于没有分析函数不能快速实现,只能用这种方式操作。

select t2.member_id, t2.created_time time from (select t1.id,

t1.member_id,

t1.created_time,

@rownum := @rownum + 1,

if(@member_id = t1.member_id, @rank := @rank + 1, @rank := 1) as rank,

@member_id := t1.member_id

from (select id, member_id, created_time

from t01_et_open_account_step_log

where step = 310

order by member_id asc, created_time asc) t1,

(select @rownum := 0, @member_id := null, @rank := 0) t0) t2 where t2.rank = 1; ORDER BY t2.member_id asc

运行结果:

也许直接看代码不够清晰,先执行里层

select t1.id,

t1.member_id,

t1.created_time,

@rownum := @rownum + 1,

if(@member_id = t1.member_id, @rank := @rank + 1, @rank := 1) as rank,

@member_id := t1.member_id

from (select id, member_id, created_time

from t01_et_open_account_step_log

where step = 310

order by member_id asc, created_time asc) t1,

(select @rownum := 0, @member_id := null, @rank := 0) t0

运行结果:

两者对比较很容易理解mysql中变量@的使用,相当于将Oracle中的分析函数是效果一样的,相当于细分来执行每一步动作,个人感觉这里和Oracle中lag()函数原理很像。

最新文章

  1. UVA2322
  2. java 线程返回值
  3. 好莱坞电影公司&系列电影
  4. AC日记——石头剪子布 openjudge 1.7 04
  5. C#属性访问器
  6. ProcessStartInfo.UseShellExecute 属性
  7. oc调用c++接口时 报错 Undefined symbols for architecture i386:
  8. 从txt中读入数据到数组中(fscanf)
  9. Moq & RhinoMocks
  10. hdu_5620_KK's Steel(水题)
  11. 用js实现2048小游戏
  12. Springboot2新特性概述
  13. Thinkpad L440 无线驱动突然无法使用,无法搜索到无线上网
  14. 连接mysql && ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)
  15. D13——C语言基础学PYTHON
  16. 【delphi】ClientDataSet详细解读
  17. JavaSE基础之JDBC
  18. js将字符串转换为数字等类型
  19. BloomFilter
  20. MSSQL中的表变量

热门文章

  1. ref 和out的区别
  2. PCB genesis方槽加内角槽孔实现方法
  3. 【洛谷3321_BZOJ3992】[SDOI2015]序列统计(原根_多项式)
  4. C++ friend关键字
  5. [转]Linux定时任务Crontab详解
  6. vue项目杂记
  7. 前端h5开发调试神奇vconsole
  8. activity间传递参数
  9. 电源管理POWER_SUPPLY_PROP_CAPACITY_LEVEL
  10. 查看/进入mac根目录的方式