首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何比较同一Server表中的记录

如何比较同一Server表中的记录
EN

Stack Overflow用户
提问于 2015-02-06 12:58:29
回答 1查看 431关注 0票数 0

我的要求是将行的每一列与其上一行进行比较。

  1. 比较第2行和第1行
  2. 比较第3行和第2行

此外,如果没有区别,我需要使该列为空。例:第3行的request_status_id与第2行的相同,所以我需要将第3行的request_status_id更新为NULL。

有干净的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-06 13:16:05

可以使用以下UPDATE语句,该语句使用Server 2012以后可用的LAG窗口函数:

代码语言:javascript
运行
复制
UPDATE #mytable
SET request_status_id = NULL
FROM #mytable AS m
INNER JOIN  (
   SELECT payment_history_id, request_status_id, 
   LAG(request_status_id) OVER(ORDER BY payment_history_id) AS prevRequest_status_id
   FROM #mytable ) t
ON  m.payment_history_id = t.payment_history_id
WHERE t.request_status_id = t.prevRequest_status_id

SQL Fiddle演示

编辑:

如果前面的值与当前值相同,则OP的要求似乎是将表中的每一列SETNULL。在这种情况下,查询变得更加冗长。下面是一个设置两个列的示例。它可以很容易地扩展到包括表格中的任何其他列:

代码语言:javascript
运行
复制
UPDATE #mytable
SET request_status_id = CASE WHEN t.request_status_id = t.prevRequest_status_id THEN NULL
                             ELSE T.request_status_id
                        END,
    request_entity_id = CASE WHEN t.request_entity_id = t.prevRequest_entity_id THEN NULL
                             ELSE t.request_entity_id
                        END
FROM #mytable AS m
INNER JOIN  (
   SELECT payment_history_id, request_status_id, request_entity_id,
   LAG(request_status_id) OVER(ORDER BY payment_history_id) AS prevRequest_status_id,
   LAG(request_entity_id) OVER(ORDER BY payment_history_id) AS prevRequest_entity_id
   FROM #mytable ) t
ON  m.payment_history_id = t.payment_history_id

SQL Fiddle演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28366360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档