2016-06-27 2 views
0

Давайте предположим, что у меня есть дата 2016-06-19 09:30:00 начала и дату окончания 2016-06-19 10:20:00Сколько секунд проходили мимо сгруппированы по часам между двумя датами

Я хотел бы получить время, прошедшие через каждый час до начала следующего часа или перед тем, как в последний раз в секундах, сгруппированных по часам и дате, результат я пытаюсь добиться (без какого-либо успеха) будет что-то вроде этого:

hour | date | time_elapsed_in_seconds 
9 | 2016-06-19 | 1800 (there are 1800 seconds between 09:30:00 and 10:00:00) 
10 | 2016-06-19 | 1200 (there are 1200 seconds between 10:00:00 and 10:20:00) 
+0

Можете ли вы нам образцы данных? Трудно представить, что мы должны запрашивать. –

+0

@TimBiegeleisen данные - это дата начала и дата окончания, которые у меня есть в таблице: start_date и end_date, а другая информация (что не имеет значения) –

ответ

1

Попробуйте это:

 with table1 as (
     select '2016-06-19 09:30:00'::timestamp without time zone start_date,'2016-06-19 10:20:00'::timestamp without time zone end_date 
    ) 


    select extract(hour from the_hour) "hour",the_hour::date "date",extract (epoch from (new_end-new_start)) "time_elapsed" from (
     select the_hour,CASE WHEN date_trunc('hour',start_date)=the_hour then start_date else the_hour end new_start, 
        CASE WHEN date_trunc('hour',end_date)=the_hour then end_date else the_hour+'1 hour'::interval end new_end 
      from (
       select generate_series(date_trunc('hour',start_date),end_date,'1 hour'::interval) the_hour,start_date,end_date from table1 
      ) a 
     ) b 
+0

Вы, безусловно, рок-человек, любой paypal, чтобы купить вам пиво? –

Смежные вопросы