SQL SERVER 2012
原始表见表一,记录的时候每个人每天的排班情况,有的人又是会改变班次,又shift 变为non-shift或者由non-shift变为shift。现在需要找出在当月排班改变的人的记录,输出另一张表。
比如这两个人,ID是786636和786656分别在8/10和7/27排班改变了,然后数据表二。
原始表数据较多,大概4万条,而且是动态的 每个月都会有更新。
原始表见表一,记录的时候每个人每天的排班情况,有的人又是会改变班次,又shift 变为non-shift或者由non-shift变为shift。现在需要找出在当月排班改变的人的记录,输出另一张表。
比如这两个人,ID是786636和786656分别在8/10和7/27排班改变了,然后数据表二。
原始表数据较多,大概4万条,而且是动态的 每个月都会有更新。
随手写的query,应该可以得到你想要的结果:
SELECT
ID,
Shift,
Date
FROM (
SELECT
ID,
Shift,
Date,
LAG(shift, 1, '') OVER (PARTITION BY ID ORDER BY date) AS prevShift,
LEAD(shift, 1, '') OVER (PARTITION BY ID ORDER BY date) AS nextShift
FROM table_name
) t
WHERE
Shift <> prevShift AND prevShift <> ''
OR Shift <> nextShift AND nextShift <> '';