您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用SQL有效地确定行之间的更改

如何使用SQL有效地确定行之间的更改

您可以尝试一下-我不保证它的性能会更好,但这是我通常将行与“上一个”行相关联的方式:

SELECT
    * --TODO, list columns
FROM
    data d
       left join
    data d_prev
       on
           d_prev.time < d.time --TODO - Other key columns?
       left join
    data d_inter
       on
           d_inter.time < d.time and
           d_prev.time < d_inter.time --TODO - Other key columns?
WHERE
    d_inter.time is null AND
    (d_prev.value is null OR d_prev.value <> d.value)

(我认为这是正确的-可以使用一些样本数据来对其进行验证)。

基本上,这种想法是将表与其自身连接起来,并针对“上一个”行的每一行(在中d)找到候选行(在中d_prev)。然后进行进一步的联接,以尝试找到d_inter存在于当前行(ind)和候选行(in d_prev)之间的行(in )。如果我们找不到这样的行(d_inter.time is null),则该候选项确实是前一行。

SQLServer 2022/1/1 18:40:25 有477人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶