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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 MATLAB动图问题
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名