当值与 SQL Server 中的最后一条记录之间存在特定差距时如何选择值
Posted
技术标签:
【中文标题】当值与 SQL Server 中的最后一条记录之间存在特定差距时如何选择值【英文标题】:How to select values when there is an specific gap between that and the last record in SQL Server 【发布时间】:2018-04-25 18:03:30 【问题描述】:我正在创建一个查询,当它与 SQL Server 中的最后一条记录之间存在 10 的差距时,我可以选择值。
假设冰箱中有一个传感器,传感器每 5 分钟上传一次冰箱温度,我正在尝试创建一个查询,让我在最后一次记录后温度下降 2°F 或更多时获取所有记录。
这是一个表格的例子:
Value | Timestamp
------+------------------------
10 2018-04-25 17:11:00.000
11 2018-04-25 17:16:00.000
12 2018-04-25 17:21:00.000
11 2018-04-25 17:26:00.000
9 2018-04-25 17:31:00.000 <<<<<<<<<<<< Dropped 2°F
10 2018-04-25 17:36:00.000
12 2018-04-25 17:41:00.000
9 2018-04-25 17:46:00.000 <<<<<<<<<<<< Dropped more than 2°F
如果我希望它返回 2018-04-25 的值,那么我想要的查询结果将是:
Times_Dropped_2
2
【问题讨论】:
这是一个gaps-and-islands 问题。什么版本的 SQL Server?补救措施在很大程度上取决于可用的分析/窗口功能。 感谢您的回答,我使用的是 MS SQL SERVER 2016 “最后一条记录”是指“上一条记录”(相对于“某些标准的最终记录”)对吗? 没错,我想知道它下降了多少次 2°F 或更多 【参考方案1】:SELECT value,
Timestamp,
value- LAG(value, 1, 0) OVER (ORDER BY TimeStamp) AS value_diff
FROM table;
这列出了与上一个条目的差异,您可以从中获取您的请求详细信息
【讨论】:
我将 where 'value_diff>=2' 应用到我的查询中,但它似乎只获取值等于或小于 2 的所有记录,而不是值至少为 2° 的记录F小于上一条记录 你能发布完整的查询吗【参考方案2】:添加到上一个答案
select count(*) from (SELECT value,
Timestamp,
value- LAG(value, 1, 0) OVER (ORDER BY TimeStamp) AS value_diff
FROM table)a
where value_diff>=2
【讨论】:
谢谢我尝试使用 LAG 来解决问题,但是 1,0 后的值是用来做什么的? 1 是您正在回顾的行数,0 是默认值(当第一行没有值时该怎么办) 我将它应用于我的查询,但它似乎只取值等于或小于 2 的所有记录,而不是那些值至少比上一个记录小 2°F 的记录跨度> 【参考方案3】:WHERE value_diff >= Temp_Value + 10
这是缺少的行,谢谢
【讨论】:
以上是关于当值与 SQL Server 中的最后一条记录之间存在特定差距时如何选择值的主要内容,如果未能解决你的问题,请参考以下文章
将第一条记录的单列与 SQL Server 中的重复记录合并
SQL Server 中第一条记录结束日期和下一条记录开始日期之间的重叠