Пожалуйста, кто-нибудь может мне помочь в получении данных из моей таблицы SQL Lite каждые 2 минуты между моим началом и временем остановки. У меня есть два столбца Data, TimeStamp, и я фильтрую между двумя метками времени, и он работает нормально, но что я пытаюсь сделать должен привести мои данные каждые 2 минуты. Например, мое время начала - 2016-12-15 10:00:00, а время остановки - 2016-12-15 10:10:00, результат должен быть 2016-12-15 10: 00: 00,2016-12-15 10: 02: 00,2016-12-15 10:04:00....
Добавьте в ваше предложение where
выражение, которое ищет 2-минутные границы:
strftime("%s", TimeStamp) % 120 = 0
Это предполагает, что у вас есть данные о точном расстоянии в 2 минуты. Он будет игнорировать данные между этими точками.
strftime("%s", TimeStamp)
преобразует вашу строку штампа времени в одно число, представляющее количество секунд с 1 января 1970 года. % 120
выполняет по модулю арифметику, получая 0 каждые 120 секунд. Если вам нужны минуты, используйте 60. Если вы хотите почасово, используйте 3600.
Что еще интереснее - и я использовал это - это взять все данные между границами и усреднить их вместе:
SELECT CAST(strftime("%s", TimeStamp) / 120 AS INTEGER) * 120 as stamp, AVG(Data)
FROM table
WHERE TimeStamp >= '2016-12-15 10:00:00' AND
TimeStamp < '2016-12-15 10:10:00'
GROUP BY stamp;
Это усредняет все данные с отметками времени в том же 2-минутном "бункере". Второе сравнение дат <
скорее, чем <=
потому что тогда последний бит будет только усреднять один образец, тогда как другие ячейки будут средними из нескольких значений. Вы также можете добавить столбцы MAX(Data)
и MIN(Data)
, если хотите узнать, сколько данных было изменено в каждом бине.
CAST(strftime("%s", TimeStamp) / 120 - 60 AS INTEGER) * 120 + 60