Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 检测时间序列中状态的变化_Sql - Fatal编程技术网

Sql 检测时间序列中状态的变化

Sql 检测时间序列中状态的变化,sql,Sql,我有一个表,其中所有记录都有一个id、时间戳和一个布尔值。我需要找出哪些记录中的布尔值在同一id为true的1秒内变为false 我一直在研究下面的语句,但在做了一些研究之后,我觉得CASE和FETCH语句结合使用可能会更好,但我还没有找到一个将它们结合使用的好例子 SELECT * FROM Table_1 WHERE timestamp IN( SELECT DATEADD(Second, 1, timestamp) from Table_1 wh

我有一个表,其中所有记录都有一个id、时间戳和一个布尔值。我需要找出哪些记录中的布尔值在同一id为true的1秒内变为false

我一直在研究下面的语句,但在做了一些研究之后,我觉得CASE和FETCH语句结合使用可能会更好,但我还没有找到一个将它们结合使用的好例子

SELECT *  
FROM Table_1  
WHERE timestamp IN(  
    SELECT DATEADD(Second, 1, timestamp)  
    from Table_1  
    where Boolean = 1)  
AND ID in (  
    SELECT ID   
    from Table_1 where Boolean = 1)  
AND Boolean = 0
那么:

Select Distinct
  t1.id
From
  Table_1 t1
    Inner Join
  Table_1 t2
    On
      t1.Id = t2.Id And 
      t1.Boolean = True And 
      t2.Boolean = False And
      DateDiff(Second, t1.Timestamp, t2.Timestamp) Between 0 And 1
在join子句和where子句中分别放了多少,这是一个品味问题

编辑

  • 添加不同的
  • 对日期差设置最小界限

FETCH是一个T-SQL命令,允许您从光标获取下一行。它与标准SQL无关。看到了。你能提供一些示例数据吗?@Mellonjollie你在使用SQL Server吗?是的,我在使用MS SQL Server。我想我知道你在说什么了,但是当表本身只有107000行时,它返回了100多万行。我现在在里面放了一个distinct。尤里卡,我明白了!感谢Laurence的帮助。我认为您需要选择DATEDIFF不仅小于或等于1,而且还等于或大于0的行。否则,你可能会得到额外的ID,因为它的差值小于1秒,因为它是负数。