Nano Hash - криптовалюты, майнинг, программирование

Извлечение субъектов, соответствующих определенным критериям, из данных временных рядов в sql

RowID  SubjectID  Value      TimeStamp    
 1          1       65    2142-04-29 12:00:00 
 2          1       58    2142-04-30 03:00:00 
 3          1       55    2142-04-30 04:00:00
 4          1       54    2142-04-30 05:00:00
 5          1       69    2142-04-30 06:15:00  
 6          1       68    2142-05-01 06:45:00
 7          2       75    2142-05-04 02:00:00 
 8          2       40    2142-05-04 03:00:00
 9          2       41    2142-05-04 03:30:00 
10          2       69    2142-05-04 04:00:00
11          2       67    2142-05-04 05:00:00

В PostgreSQL я пытаюсь найти объекты, которые имеют два последовательных значения ниже 60 (может быть более 2 ниже 60, но первые 2 важны для записи), за которыми следуют два последовательных значения выше 60, которые появляются впоследствии. Меня также интересует продолжительность времени между этими двумя событиями. Я надеюсь получить вывод, например:

 SubjectID  DidEventOccur Duration 
 1          1             03:15:00
 2          1             01:00:00

Продолжительность — это время, когда произошло первое значение ниже 60, до момента появления второго значения выше 60. Любая помощь приветствуется!


Ответы:


1

Вы можете использовать lag() и lead() для идентификации строк и получения необходимой информации:

select t.subjectId, t.didEventOccur,
       (next_timestamp - timestamp) as duration
from (select t.*,
             lag(t.value) over (partition by t.subjectid order by t.timestamp) as prev_value,
             lead(t.value) over (partition by t.subjectid order by t.timestamp) as next_value,
             lead(t.timestamp) over (partition by t.subjectid order by t.timestamp) as next_timestamp
      from t
     ) t
where value < 60 and next_value < 60 and
      (prev_value is null or prev_value >= 60);
20.01.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..