Вычитание временных меток в sql - PullRequest
0 голосов
/ 02 июля 2019

У меня есть следующие два случая

Случай1

Таблица1

Name  Start_Sub1           End_Sub1            Start_Sub2           End_Sub2 
A    2018-09-19 07:42:00  2018-09-19 09:12:00 2018-09-23 04:02:00 2018-09-23 05:09:00

Я хочу узнать общее время, которое студент провел на экзамене, т.е. в обоихпредметы.Какую функцию я должен использовать, чтобы получить это.

Случай 2: Из-за человеческой ошибки данные были задокументированы так:

Name  Start_Sub1           End_Sub1            Start_Sub2           End_Sub2 
A    2018-09-19 07:42:00  2018-09-19 09:12:00 2018-09-19 08:02:00 2018-09-19 02:09:00

В этом случае время перекрывается в обоихвременные метки.Можно ли рассчитать общее время, проведенное на экзамене, по такому сценарию?

1 Ответ

0 голосов
/ 03 июля 2019

Вы можете преобразовать метки времени в секунды с помощью функции EXTRACT() и выяснить, перекрываются ли сегменты или нет.Запрос должен выглядеть следующим образом:

select
  *,
  case 
    when extract(epoch from End_Sub1) < extract(epoch from Start_Sub2) 
    then extract(epoch from End_Sub1) - extract(epoch from Start_Sub1) +
         extract(epoch from End_Sub2) - extract(epoch from Start_Sub2)
    else extract(epoch from End_Sub2) - extract(epoch from Start_Sub1)
  end as diff
from table1

Подробнее о том, как получить разницу во времени, см. Разница во времени в секундах с помощью Nettezza .

...