sql - SQL 选择值更改的行
问题描述
我有一张这样的桌子:
id | diameter
___________________
100 | 5.0
101 | 5.0
102 | 3.0
103 | 3.0
104 | 3.0
105 | 6.0
106 | 6.0
SELECT a.* FROM tableX AS a WHERE a.diameter <> ( SELECT TOP 1 b.diameter FROM tableX AS b WHERE a.id > b.id ORDER BY b.id )
我需要查询来向我显示直径发生变化的位置的 ID。在这个例子中,我需要它来显示 id 102 和 id 105
解决方案
您想lag()
在 SQL Server 2012+ 中使用:
select t.*
from (select t.*, lag(t.diameter) over (order by t.id) as prev_diameter
from t
) t
where prev_diameter <> diameter;
在 SQL Server 2008 中,相关子查询 orapply
可以工作:
select t.*
from t cross apply
(select top (1) t2.*
from t t2
where t2.id < t.id
order by t2.id desc
) tprev
where tprev.diameter <> t.diameter
推荐阅读
- python - 有人可以帮我将其格式化为电话号码的形式:000-000-0000
- python - 为什么我在 AlienInvasion.py 上收到 NameError
- javascript - whatsapp的简单发送表格
- kubernetes - Kubernetes 部署终止最旧的 Pod
- python - Python - 如何在 selenium 中的选项卡之间切换
- gitlab - Gitlab:如何在 GitLab 11.x 上批量修改项目和组的可见性?
- php - GuzzleHttp 在生产和 localhost 中具有不同的标头
- python - ValueError:尝试使用 Cloud Functions 中的字典更新 Firestore 文档时,一个或多个组件不是字符串或为空
- datetime - 在 Kotlin 中将 ISO 8601 持续时间转换为人类可读的文本
- javascript - 我的重定向链接不起作用。(return redirect('/show');)