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

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 <> '';

    评论

报告相同问题?

悬赏问题

  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化