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

欠落している日付のデータをテーブルに入力します(postgresql、redshift)

    クエリの背後にある考え方を見てください:

    select distinct on (domain, new_date) *
    from (
        select new_date::date 
        from generate_series('2016-04-12', '2016-04-17', '1d'::interval) new_date
        ) s 
    left join a_table t on date <= new_date
    order by domain, new_date, date desc;
    
      new_date  |     domain      |    date    | visitors | hits  
    ------------+-----------------+------------+----------+-------
     2016-04-12 | www.domain1.com | 2016-04-12 |     1231 | 23423
     2016-04-13 | www.domain1.com | 2016-04-13 |     1374 | 26482
     2016-04-14 | www.domain1.com | 2016-04-13 |     1374 | 26482
     2016-04-15 | www.domain1.com | 2016-04-13 |     1374 | 26482
     2016-04-16 | www.domain1.com | 2016-04-13 |     1374 | 26482
     2016-04-17 | www.domain1.com | 2016-04-17 |     1262 | 21493
    (6 rows)
    

    要件に応じて開始日と終了日を選択する必要があります。クエリは非常に高額になる可能性があるため(数十億のギャップについて言及)、注意して適用してください(より小さなデータサブセットでテストするか、段階的に実行します)。

    generate_series()がない場合 独自のジェネレーターを作成できます。 ここに興味深い例がありますgenerate_series()の代わりに引用された記事のビューを使用できます 。たとえば、'2016-04-12' + 5 daysの期間が必要な場合 :

    select distinct on (domain, new_date) *
    from (
        select '2016-04-12'::date+ n new_date
        from generator_16
        where n < 6
        ) s 
    left join a_table t on date <= new_date
    order by domain, new_date, date desc;
    

    最初の例と同じ結果が得られます。



    1. クエリフィールドの最後の文字でグループを選択

    2. 複合ステートメントでEVENTを作成したときに、このエラーが発生したのはなぜですか?

    3. Oracle Convert Seconds to Hours:Minutes:Seconds

    4. XmlHTTPRequest:XML解析エラー:要素が見つかりません