sql >> データベース >  >> RDS >> PostgreSQL

テーブルの開始日と終了日からのPostgresのGenerate_series

    このためにCTEは必要ありません。必要以上に費用がかかります。
    そして、timestampにキャストする必要はありません。 、結果はすでに データ型のtimestamp timestampをフィードするとき generate_series()に入力します 。詳細はこちら:

    • PostgreSQLで2つの日付間の時系列を生成する

    Postgresで9.3 以降、LATERALを使用できます 参加:

    SELECT to_char(ts, 'YYYY-MM-DD HH24') AS formatted_ts
    FROM  (
       SELECT min(start_timestamp) as first_date
            , max(start_timestamp) as last_date
       FROM   header_table
       ) h
      , generate_series(h.first_date, h.last_date, interval '1 hour') g(ts);
    

    オプションでto_char()を使用 言及した形式のテキストとして結果を取得します。

    これは任意ので機能します Postgresバージョン:

    SELECT generate_series(min(start_timestamp)
                         , max(start_timestamp)
                         , interval '1 hour') AS ts
    FROM   header_table;
    

    通常は少し高速です。
    SELECTでset-returning関数を呼び出す listは非標準のSQL機能であり、一部の人からは嫌われています。また、Postgres 10で最終的に修正された動作上の奇妙な点がありました(この単純なケースではありませんが)。参照:

    • SELECT句で複数のセットを返す関数に期待される動作は何ですか?

    NULLの微妙な違い 取り扱い:

    に相当
    max(start_timestamp)
    

    で取得されます
    ORDER BY start_timestamp DESC NULLS LAST
    LIMIT 1

    NULLS LASTなし NULL値は最初になります 降順(できる場合 start_timestampではNULL値である )。 last_dateの場合はNULLになります クエリは空になります。

    詳細:

    • PostgreSQLクエリでDESCを注文するときにNULL値が最初に来るのはなぜですか?


    1. 既存のデータベースを中心にフラスコアプリケーションを構築するにはどうすればよいですか?

    2. Postgres動的クエリ関数

    3. adopR12.2のダウンタイムとHotpatch適用モード

    4. 軽量のWordPressインストール:SQLiteでWordPressをインストールする方法