【业务功能篇26】 ROW_NUMBER() 排名函数 给表单数据增加序列号

业务场景: 当业务在进行月报报表制作时,会有些模块是需要填充当前月的top问题单,那么这些问题单,在第一列就要给标记序列号从1开始的序号,所以这个序号是根据业务选择的问题单后,在根据当前问题单记录进行的序列号填充,比如有3条 那么就是1,2,3,如果业务要换问题单,那么进行替换,但是对应的这个序列依旧是从1开始排序的

所以这种情况下,序号和问题单是没有关联的,那么如何去给这一部分展示的top问题单增加序列号呢?  可以使用 row_number()函数

ROW_NUMBER() 

直接在结果记录添加顺序排序序号

根据排序依据列的值进行连续的顺序排序

SELECT
	ROW_NUMBER () over ( ORDER BY warn_date ) rowNum,
	warn_no warnNo,
	warn_status warnStatus,
	date_format( warn_date, '%Y-%m-%d %H:%i:%s' ) warnDate
	
FROM
	problem_warn_f

 那么rowNum列就是对应的序号列了 

【业务功能篇26】 ROW_NUMBER() 排名函数 给表单数据增加序列号_第1张图片 

 


RANK()  

另外还有:根据排序依据列的值进行连续的顺序排序,但遇到值相同则序号相同

SELECT
	rank() over ( ORDER BY warn_date ) rowNum,
	warn_no warnNo,
	warn_status warnStatus,
	date_format( warn_date, '%Y-%m-%d %H:%i:%s' ) warnDate
	
FROM
	problem_warn_f

可以看到,前面7条 根据日期字段排序,日期相同,序号都为1 ,到了第8条,时间不一样,那么序号就为8 ,会跳过2,3,4...序号 直接来到8   

【业务功能篇26】 ROW_NUMBER() 排名函数 给表单数据增加序列号_第2张图片

 


DENSE_RANK() 

根据排序依据列的值进行连续的顺序排序,遇到值相同则序号相同,后续的序号会连续

 

SELECT
	DENSE_RANK()  over ( ORDER BY warn_date ) rowNum,
	warn_no warnNo,
	warn_status warnStatus,
	date_format( warn_date, '%Y-%m-%d %H:%i:%s' ) warnDate
	
FROM
    problem_warn_f

 观察,第8个序号,接着是2,而不是8 

【业务功能篇26】 ROW_NUMBER() 排名函数 给表单数据增加序列号_第3张图片

你可能感兴趣的:(业务场景实例问题,数学建模,mysql,排名函数)