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

PostgreSQLで一連の日付を生成するための仮想テーブルを生成するにはどうすればよいですか?

    日付のリスト

    generate_series関数 を使用します 日付のリストを取得するために日付に追加できる番号のリストを取得するには:

    SELECT CURRENT_DATE + s.a AS dates 
      FROM generate_series(0,14,7) as s(a);
    

    結果:

    dates
    ------------
    2004-02-05
    2004-02-12
    2004-02-19
    

    ピボット

    質問の後半では、結果セットのピボット、つまり行データを列データに変換する方法について説明します。 PIVOTとUNPIVOTはANSIですが、PostgreSQLでサポートされているとは見なされません。現在 。クエリをピボットするために最も一貫してサポートされている手段は、集計関数を使用することです。

       SELECT t.account,
              SUM(CASE WHEN t.date = '2010-01-01' THEN t.amount END) AS '2010-01-01',
              SUM(CASE WHEN t.date = '2010-01-02' THEN t.amount END) AS '2010-01-02',
              SUM(CASE WHEN t.date = '2010-01-03' THEN t.amount END) AS '2010-01-03',
              SUM(t.amount) AS Balance
         FROM (SELECT CURRENT_DATE + s.a AS dates 
                 FROM generate_series(0,14,7) as s(a)) x
    LEFT JOIN TRANSACTIONS y ON y.date = x.date
     GROUP BY t.account
    

    動的列

    ...は動的SQL を意味します 。




    1. MySQLで時間を「2:34時間」、「0:34時間」などにフォーマットする方法

    2. oracle12cでSQLクエリの結果をJSONとして返します

    3. MySQLINSERTおよびSELECT優先順位

    4. PLSQLブロックに複数のDMLクエリがある場合、影響を受ける行の集計を計算するにはどうすればよいですか?