2016-11-16 156 views
0

我有一个给定的SQLIt数据库(所以没有机会做一个更好的方式):SQLITE边缘检测

CREATE TABLE `history` (
    `TIMESTAMP` TIMESTAMP, 
    `DEVICE` `enter code here`varchar(32), 
    `TYPE` varchar(32), 
    `EVENT` varchar(512), 
    `READING` varchar(32), 
    `VALUE` varchar(32), 
    `UNIT` varchar(32) 
); 

在这个表中我有例如以下数据:

DEVICE VALUE 
d1  1 
d5  500 
d2  10 
d1  2   <-- 
d5  501 
d1  100   <--- 

我想找出设备“d1”的所有时间戳,其中最后一个值和当前值之间的差异> 10

我绝对不知道如何使用SQL执行此操作

谢谢

+0

你在一个体面的操作系统,或Windows? –

回答

1

为了获取当前时间戳t的最后一个值,你可以使用这样的查询:

SELECT Value 
FROM History 
WHERE Device = '...' 
    AND Timestamp < T 
ORDER BY Timestamp DESC 
LIMIT 1; 

然后,您可以使用此为您查询correlated subquery

SELECT Timestamp 
FROM History 
WHERE Device = 'd1' 
    AND ABS((SELECT Value 
      FROM History AS last 
      WHERE Device = 'd1'     -- or Device = History.Device 
      AND last.Timestamp < History.Timestamp 
      ORDER BY Timestamp DESC 
     ) - Timestamp) > 10; 
+0

不错的解决方案!我想你可能需要一个'WHERE设备=“d1”'或者其他的。 –

+0

@MarkSetchell谢谢! –