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 です。 デモ

    出力:

    | 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. データベースからjsonを使用してデータをフェッチし、Androidの水平リストビューに入力する方法

    2. DBAが担当する9つの重要なタスク

    3. データベースSQLクエリの最初の要素を削除します

    4. T-SQL(sp_tables)を使用してSQLServerのテーブルとビューのリストを返す