Получать данные каждые 2 минуты SQL Lite

-2

Пожалуйста, кто-нибудь может мне помочь в получении данных из моей таблицы 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....

  • 0
    Ваш вопрос является широким и неясным, вам следует немного подробнее объяснить, в чем ваша проблема
  • 0
    см. также stackoverflow.com/help/how-to-ask
Показать ещё 5 комментариев
Теги:

1 ответ

2
Лучший ответ

Добавьте в ваше предложение 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), если хотите узнать, сколько данных было изменено в каждом бине.

  • 0
    в течение нечетных минут, таких как 3 минуты, 5 минут и т.д.
  • 0
    Для этого вам нужно настроить формулу так, чтобы она «сместилась» к границам нечетных минут: CAST(strftime("%s", TimeStamp) / 120 - 60 AS INTEGER) * 120 + 60
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню