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

日付間のギャップを埋めるためにレコードを複製する

    CONNECT BY LEVELを使用して行ジェネレータステートメントを作成できます 構文、テーブル内の個別の製品とクロス結合してから、それを価格テーブルに外部結合します。最後の仕上げは、LAST_VALUEを使用することです 関数とIGNORE NULLS 新しい値が見つかるまで価格を繰り返し、ビューが必要だったので、CREATE VIEW ステートメント:

    create view dense_prices_test as
    select
        dp.price_date
      , dp.product
      , last_value(pt.price ignore nulls) over (order by dp.product, dp.price_date) price
    from (
          -- Cross join with the distinct product set in prices_test
          select d.price_date, p.product
          from (
                -- Row generator to list all dates from first date in prices_test to today
                with dates as (select min(price_date) beg_date, sysdate end_date from prices_test)
                select dates.beg_date + level - 1 price_date 
                from dual
                cross join dates
                connect by level <= dates.end_date - dates.beg_date + 1
                ) d
          cross join (select distinct product from prices_test) p
         ) dp
    left outer join prices_test pt on pt.price_date = dp.price_date and pt.product = dp.product;
    


    1. 月ごとの製品売上を比較するSQLクエリ

    2. 出力句のSQLでフィルタリング

    3. 悪い習慣:行を数えるのは難しい

    4. SQLServerエラー-COMコンポーネントの呼び出しからHRESULTE_FAILが返されました