今天开发时遇到一个需求:
要在一张表里通过对比上下两条数据,找错误数据。
LAG和LEAD分析函数可以在同一次查询中取出同一字段的前N行的数据(Lag) 和 后N行的数据(Lead)作为独立的列。
在这里我需要查前一行的数据做比较,sql如下:
SELECT
-- DATE_ADD()里是我对日期类型的运算(返回的值是前一行的DATE_ADD()运算结果,没有定义后续行返回null)
-- 1代表前一行
LAG ( DATE_ADD( study_time, INTERVAL res_progress SECOND ), 1 )
OVER ( PARTITION BY student_user_id -- 以某个字段分组
ORDER BY study_time ) nextEndTime -- 以某个字段排序
FROM
stu_courseres_record
WHERE
course_id = 0
ORDER BY
student_user_id,
study_time
这样就找到每行数据的上一行数据了,怎么做对比还是根据自己的业务。
希望能帮助到你