Sqlite возвращает разницу в строке между последним значением и значением 24 часа назад

Нуб Sqlite здесь. У меня есть база данных временных рядов SQLite, которая обновляется каждые четыре минуты, и я хочу сообщить о разнице в значении строки между самой последней точкой данных и той, которая была (приблизительно) 24 часа назад. Если я побегу

SELECT entity_id, state, last_changed
FROM "states" where entity_id = "sensor.nodered_46ce6408_d3dd5c" and last_changed > "1002020-05-14 18:12:28.008172"

я получил

entity_id   state   last_changed
sensor.nodered_46ce6408_d3dd5c  6940.38     2020-05-04 18:14:35.969094
sensor.nodered_46ce6408_d3dd5c  6940.4      2020-05-04 18:18:45.913404
sensor.nodered_46ce6408_d3dd5c  6940.42     2020-05-04 18:22:55.892357 

Но, используя следующее в качестве первого шага, я даже не получаю результата для разницы между двумя последними значениями.

SELECT entity_id, state, last_changed,
    (SELECT A.state - B.state
        FROM states as B
        WHERE B.entity_id = A.entity_id AND
            B.last_changed = (SELECT MAX(last_changed) FROM states C WHERE C.last_changed > A.last_changed AND C.entity_id = A.entity_id)) AS difference
FROM states as A 

Мне не нужно записывать результат разницы в таблицу, мне просто нужен результат, когда запрос выполняется каждые несколько часов.

Любые подсказки для решения этой проблемы? ТИА.

РЕДАКТИРОВАТЬ

Я улучшил свой запрос, но еще не там. Я получаю почти "SELECT": синтаксическая ошибка

SELECT state
    FROM states
    SELECT (A.state - B.state)
    WHERE B.(entity_id = "sensor.nodered_46ce6408_d3dd5c" AND last_changed >= datetime('now', 'localtime','-24 hours') order by last_changed limit 1) AND A.(entity_id = "sensor.nodered_46ce6408_d3dd5c"
    AND last_changed <=  datetime('now', 'localtime') order by last_changed desc limit 1)

person Rob B    schedule 15.05.2020    source источник


Ответы (1)


Рабочий ответ:

SELECT b.entity_id, 
       b.state, 
       b.last_changed, 
       ( b.state - (SELECT a.state 
                    FROM   states a 
                    WHERE  a.entity_id = "sensor.nodered_46ce6408_d3dd5c" 
                           AND a.last_changed >= Datetime('now', 'localtime', 
                                                 '-24 hours' 
                                                 ) 
                    ORDER  BY a.last_changed 
                    LIMIT  1) ) AS difference 
FROM   states b 
WHERE  b.entity_id = "sensor.nodered_46ce6408_d3dd5c" 
       AND b.last_changed <= Datetime('now', 'localtime') 
ORDER  BY b.last_changed DESC 
LIMIT  1

Кредит @sukitha

person Rob B    schedule 17.05.2020