sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man fyller i rader baserat på händelsetypdata

Förutsatt att:

  • du kör Postgres

  • en given kund har alltid exakt två rader i tabellen

  • hour är av en datumliknande datatyp

Sedan är ett alternativ att använda generate_series() med en sidofog, som så:

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

Demo på 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



  1. PDO PHP infoga i DB från en associativ array

  2. Multiplicera två kolumner som har beräknats på en CASE-sats

  3. Hur man säkerhetskopierar MySQL-databaser med hjälp av cron-jobb

  4. Hur ansluter man till localhost PostgreSQL på Mac med PSequel GUI?