PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

postgresql:разделяне на периода от време при събитие

Можете да направите UNION вместо. По този начин не генерирате ненужни редове

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
 

Ето SQLFiddle демонстрация

Изход:

<преди>| държава | начална_дата | крайна_дата | дата_на събитие ||---------|------------|------------|----------- -|| A | 1960-01-01 | 19.07.1994 | 1994-07-20 || A | 1994-07-20 | 1999-12-31 | 1994-07-20 || B | 1926-01-01 | 1995-12-31 | (null) |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мога ли да използвам функциите на Postgres, за да намеря точки във въртящ се правоъгълник с фиксиран размер?

  2. Нулевата стойност не е уникална

  3. Как да извлечете номера на седмицата от дата в PostgreSQL

  4. Динамични колони на таблица, базирани на потребителските предпочитания

  5. В Redshift/Postgres, как да преброя редове, които отговарят на условие?