sql >> Database >  >> RDS >> PostgreSQL

postgresql:tijdsperiode bij evenement splitsen

Je kunt UNION . doen in plaats van. Zo genereer je geen onnodige rijen

SELECT country, start_date, 
       CASE WHEN event_date BETWEEN start_date AND end_date 
            THEN event_date - 1 
            ELSE end_date
       END AS end_date, event_date
  FROM table1
 UNION ALL
SELECT country, event_date, end_date, event_date
  FROM table1
 WHERE event_date BETWEEN start_date AND end_date
 ORDER BY country, start_date, end_date, event_date

Hier is een SQLFiddle demo

Uitgang:

| country | start_date |   end_date | event_date |
|---------|------------|------------|------------|
|       A | 1960-01-01 | 1994-07-19 | 1994-07-20 |
|       A | 1994-07-20 | 1999-12-31 | 1994-07-20 |
|       B | 1926-01-01 | 1995-12-31 |     (null) |



  1. Verwijzen naar gegevens uit meerdere tabellen

  2. Python + MySQLdb executemany

  3. Extraheer gegevens van het door de gebruiker gedefinieerde type via cx_Oracle

  4. Vloeiend NHibernate en PostgreSQL, SchemaMetadataUpdater.QuoteTableAndColumns - System.NotSupportedException:Opgegeven methode wordt niet ondersteund