Как выбрать максимальную метку времени и минимальную метку времени для каждого интервала

0

Изображение 174551

Я буду использовать mysql или postgresql.

Можно выбрать максимальную и минимальную метку времени каждого интервала по разделу 2?

например:

red block:2018-05-27 15:11:49~2018-05-27 15:11:54
green block:2018-05-27 15:11:55~2018-05-27 15:12:12
yellow block:2018-05-27 15:12:13~2018-05-27 15:12:16
Теги:

1 ответ

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

Это проблема пробелов и островов. Я настоятельно рекомендую Postgres. Он легко решается с использованием разности номеров строк:

select section1, section2, min(datetime), max(datetime)
from (select t.*,
             row_number() over (partition by section1 order by datetime) as seqnum_1,
             row_number() over (partition by section1, section2 order by datetime) as seqnum_12
      from t
     ) t
group by (seqnum_1 - seqnum_12);

Разница чисел строк идентифицирует интересующие вас разделы. Причина немного трудно объяснить, но если вы запустите подзапрос, вы увидите, что происходит - разница постоянна для каждого интересующего раздела.

Тот же код будет работать в MySQL 8.0. Однако более ранние версии MySQL не поддерживают функции окна, поэтому расчет намного сложнее.

  • 0
    Можете ли вы объяснить, что означает seqnum_1 - seqnum_12, пожалуйста?
  • 0
    В этом разница между двумя значениями: seqnum_1 и seqnum_12 .

Ещё вопросы

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