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

generate_seriesを使用してPostgreSQLで欠落している日付を埋める方法

    多くの場合、PostgreSQLで欠落している日付を、それらの日付値の欠落している行を埋めることによって埋める必要があります。 generate_series関数を使用してPostgreSQLで欠落している日付を入力する方法は次のとおりです。

    generate_seriesを使用してPostgreSQLで欠落している日付を埋める方法

    PostgreSQLで不足している日付を埋める手順は次のとおりです。 PostgreSQLでgenerate_seriesを使用して、不足している値を埋めます。

    次のテーブルがあるとしますsales(order_date、sale)

    postgresql=# create table sales(order_date date,sale int);
    
    postgresql=# insert into sales(order_date,sale) values('2020-04-01',212),
         ('2020-04-04',220),
         ('2020-04-05',120),
         ('2020-04-07',200),
         ('2020-04-08',222),
         ('2020-04-10',312),
         ('2020-04-11',225),
         ('2020-04-12',212);
    
    postgresql=# select * from sales;
    +------------+------+
    | order_date | sale |
    +------------+------+
    | 2020-04-01 |  212 |
    | 2020-04-04 |  220 |
    | 2020-04-05 |  120 |
    | 2020-04-07 |  200 |
    | 2020-04-08 |  222 |
    | 2020-04-10 |  312 |
    | 2020-04-11 |  225 |
    | 2020-04-12 |  212 |
    +------------+------+
    

    ボーナスリード:PostgreSQLで中央値を計算する方法

    上の表からわかるように、4月2日、3日など、日付の値が欠落しています。

    このデータをグラフにプロットしようとすると、次のようになります

    このようなグラフは、欠落している日付の列のギャップを示していないため、誤解を招く可能性があります。

    ボーナスリード:PostgreSQLで移動平均を計算する方法

    PostgreSQLで欠落しているデータを埋めるには、行として欠落している日付値を含め、テーブル内の最小日付と最大日付の間のすべての日付を含む「ヘルパー」日付系列テーブルを作成する必要があります。このヘルパーテーブルにセールスを追加します テーブル。

    PostgreSQLでgenerate_seriesを使用して、日付系列テーブルを生成します。 generate_series 系列の最小値と最大値を指定すると、関数は連続する一連の数値と日付を自動的に生成します。

    これが例です。ここでは、generate_seriesに、テーブル内の最小日付と最大日付の間の日付系列を生成するように指示しています。これには、行として欠落している日付値も含まれます。

    postgres=# SELECT generate_series(min(order_date), max(order_date), '1d')::date AS order_date
               FROM   sales;
    
     order_date
    ------------
     2020-04-01
     2020-04-02
     2020-04-03
     2020-04-04
     2020-04-05
     2020-04-06
     2020-04-07
     2020-04-08
     2020-04-09
     2020-04-10
     2020-04-11
     2020-04-12
    

    ボーナスリード:PostgreSQLでCSVファイルをインポートする方法

    次に、 salesを使用してヘルパーテーブルの左結合を実行します PostgreSQLで欠落している日付を埋めるため。

    postgres=# SELECT x.order_date, t.sale
               FROM (
                  SELECT generate_series(min(order_date), max(order_date), '1d')::date AS order_date
                  FROM   sales
                   ) x
               LEFT   JOIN sales t USING (order_date)
               ORDER  BY x.order_date;
    
     order_date | sale
    ------------+------
     2020-04-01 |  212
     2020-04-02 |
     2020-04-03 |
     2020-04-04 |  220
     2020-04-05 |  120
     2020-04-06 |
     2020-04-07 |  200
     2020-04-08 |  222
     2020-04-09 |
     2020-04-10 |  312
     2020-04-11 |  225
     2020-04-12 |  212
    

    PostgreSQLで不足している日付を入力したら、レポートツールを使用して、このデータを棒グラフまたはダッシュボードにプロットし、チームと共有できます。これは、Ubiqを使用して作成された1日の売上を示す棒グラフの例です。

    2つのグラフで違いを確認してください!

    PostgreSQLデータベースからチャート、ダッシュボード、レポートを作成したい場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。

    1. Oracleのテーブルでのシーケンスギャップの検索

    2. OracleのEntityFrameworkサポートを使用してパスカルケースを強制するにはどうすればよいですか?

    3. SQLにパラメーターを渡すこととは何ですか?なぜそれが必要なのですか?

    4. SQLiteとカスタムオーダー