PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como preencher linhas com base nos dados do tipo de evento


Assumindo que:

  • você está executando o Postgres

  • um determinado cliente sempre tem exatamente duas linhas na tabela

  • hour é de um tipo de dados do tipo data

Então uma opção é usar generate_series() com uma junção lateral, assim:
select t.customer_id, x.hour
from (
    select customer_id, min(hour) min_hour, max(hour) max_hour 
    from mytable 
    group by customer_id
) t
cross join lateral generate_series(min_hour, max_hour, '1 hour') x(hour)
order by t.customer_id, x.hour

Demonstração no DB Fiddlde :
customer_id | hour               
:---------- | :------------------
X           | 2019-04-01 13:00:00
X           | 2019-04-01 14:00:00
X           | 2019-04-01 15:00:00
X           | 2019-04-01 16:00:00
X           | 2019-04-01 17:00:00
Y           | 2019-04-01 17:00:00
Y           | 2019-04-01 18:00:00
Y           | 2019-04-01 19:00:00