mofei0503 2016-11-23 03:20 采纳率: 0%
浏览 1391

SQL Server如何在同一张表里进行行对比,输出某列值改变的行

SQL SERVER 2012

原始表见表一,记录的时候每个人每天的排班情况,有的人又是会改变班次,又shift 变为non-shift或者由non-shift变为shift。现在需要找出在当月排班改变的人的记录,输出另一张表。
比如这两个人,ID是786636和786656分别在8/10和7/27排班改变了,然后数据表二。
原始表数据较多,大概4万条,而且是动态的 每个月都会有更新。
图片说明
图片说明

  • 写回答

1条回答 默认 最新

  • hydrate 2016-11-23 05:44
    关注

    随手写的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 <> '';

    评论

报告相同问题?