再帰的な共通表式を使用して連続データを欠落します



文脈
私は日付によって他の通貨で通貨の価値を含むテーブルを持っています、しかし、働く日付だけ.
私は、ソーステーブルの始まりからすべての日付のためにデータを必要とします.
サンプルデータ:

ご覧の通り、日付は連続ではありません.

最初のトライ
WITH srct(fecha) AS (
    SELECT MIN(fecha) fecha FROM BCRD_TC_OTRAS_MON
     UNION ALL
    SELECT fecha + 1 fecha FROM srct WHERE fecha + 1 <= (SELECT MAX(fecha) fecha FROM BCRD_TC_OTRAS_MON)
)
SELECT a.fecha,
    NVL(dolar_can, LAG(dolar_can, 1) OVER(ORDER BY a.fecha)) dolar_can,
    NVL(franco_sui, LAG(franco_sui, 1) OVER(ORDER BY a.fecha)) franco_sui,
    NVL(euro, LAG(euro, 1) OVER(ORDER BY a.fecha)) euro,
    NVL(dolar_usd, LAG(dolar_usd, 1) OVER(ORDER BY a.fecha)) dolar_usd
FROM
    srct a
        LEFT JOIN
    BCRD_TC_OTRAS_MON b ON b.fecha = a.fecha
ORDER BY 1
結果

このアプローチは前の日付からデータを受け取りますが、連続した欠落データの1日以上は動作しません.COALESCEと複数のLAG関数を使用している場合には動作しますが、最終的にはクエリは上品に見えません.

次のトライ
WITH srct(fecha, dolar_can, franco_sui, euro, dolar_usd) AS (
    SELECT fecha, dolar_can, franco_sui, euro, dolar_usd FROM BCRD_TC_OTRAS_MON WHERE fecha = (SELECT MIN(fecha) fecha FROM BCRD_TC_OTRAS_MON)
     UNION ALL
    SELECT a.fecha + 1 fecha,
        NVL(b.dolar_can, a.dolar_can), NVL(b.franco_sui, a.franco_sui),
        NVL(b.euro, a.euro), NVL(b.dolar_usd, a.dolar_usd)
    FROM srct a
            LEFT JOIN
        BCRD_TC_OTRAS_MON b ON a.fecha + 1 = b.fecha
    WHERE a.fecha + 1 <= (SELECT MAX(fecha) fecha FROM BCRD_TC_OTRAS_MON)
)
SELECT fecha, dolar_can, franco_sui, euro, dolar_usd
  FROM srct
ORDER BY 1
結果

このアプローチを使用すると、すべての行方不明の日付のBCRD_TC_OTRAS_MONテーブルからSRCTと以前の利用可能な行データからすべての日付を取得します.
私はそれが助けることを望む.
読書ありがとう.