PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak wypełnić wiersze na podstawie danych typu zdarzenia

Zakładając, że:

  • używasz Postgresa

  • dany klient ma zawsze dokładnie dwa wiersze w tabeli

  • hour ma typ danych podobny do daty

Jedną z opcji jest użycie generate_series() z bocznym sprzężeniem, jak na przykład:

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 na 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Aplikacja Simple Rails:Błąd nie może odwiedzić liczby całkowitej

  2. Dlaczego jeden identyfikator w CREATE TABLE jest ujęty w cudzysłów, a pozostałe nie?

  3. PostgreSQL round (v numeryczne, s int)

  4. Zaktualizuj rekordy, które spełniają warunek z rosnącą liczbą

  5. Wersje Postgresa nie są kompatybilne