最近在维护老项目时,需要对历史数据做分析取出分区数据中的第一条,无奈因为MySQL版本过低,无法使用函数row_number() over,苍了个天~
不过这点小事怎么可能难倒我们这群考古专家呢,在此分享一下解决方案。
主要原因是问题不解决要背锅啊,那能行吗~~~~~~~~
☆ 排查过程
1.使用函数查询数据时无法使用函数
2.确认数据库版本为5.6,查阅资料后确认在MySQL 5.6及之前的版本中,没有直接的ROW_NUMBER()函数,这意味着无法使用OVER子句来对数据进行窗口排序和编号
3.转变思路,更换解决方案
☆ 解决方案
- 先看一下解决方案的代码
select * from(select a.*,@rownum := @rownum+1 as rownum,IF(@fz=a.CUST_NO,@rank := @rank+1,@rank := 1) as rank,@fz := a.CUST_NO as fz_custNo from(select grading_result_key,CUST_NO,GRADING_DATE,OBJORGKEY,CUST_OPEN_DATE from td53_cust_result_uh ORDER BY CUST_NO asc,GRADING_DATE ASC) a,(select @rownum := 0,@fz := null,@rank := 0) b
) c where rank=1 and CUST_OPEN_DATE <'2019-06-13' and OBJORGKEY>'2019-06-14' ;
- 查询结果
- 定义变量语句解析
## @rownum 记录查询结果的数据行号
## @fz 分组字段
## @rank 记录分组后,同一个组内的排序行号
select @rownum := 0,@fz := null,@rank := 0
今天你背锅了吗?不好意思我没有,O(∩_∩)O哈哈~~~~
☆点击:精彩内容,了解更多。