2016-06-27 2 views
0

Supposons que j'ai une date de début 2016-06-19 09:30:00 et une date de fin 2016-06-19 10:20:00Combien de secondes passaient groupés par heure entre deux dates

Je voudrais obtenir le temps écoulé toutes les heures avant de commencer la prochaine heure ou avant de la dernière fois en quelques secondes par heure et regroupés ce jour, le résultat que je suis en train de réaliser (sans aucun succès) serait quelque chose comme ceci:

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

Pouvez-vous nous quelques exemples de données? Il est difficile de visualiser ce que nous devrions interroger. –

+0

@TimBiegeleisen les données sont la date de début et la date de fin que j'ai dans un tableau un start_date et un end_date et une autre information (qui est hors de propos) –

Répondre

1

Essayez ceci:

 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

Vous avez du rock, un paypal pour vous acheter une bière? –