当值与 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 中第一条记录结束日期和下一条记录开始日期之间的重叠

如何从SQL Server中的重复行中获取最后一行?

SQL查询从链接表中检索最后一条记录[重复]

SQL优化工具 - SQL Server Profiler与数据库引擎优化顾问

在 SQL 中选择发送者和接收者之间的最后一条消息