2016-11-16 237 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謝謝! –