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

ギャップを埋める方法は?

    解決しようとしている問題が 2 つあります。そのギャップをどう埋めるかがまず課題です。 2 つ目の問題は、不足しているレコードの [カウント] フィールドにデータを入力することです。

    問題 1:これは Dates Lookup table を使用することで解決できます または、recursive common table expressionを作成することによって .オプションである場合は、このための日付ルックアップ テーブルを作成することをお勧めします。そのようなテーブルを作成できない場合は、このようなものが必要になります。

    WITH CTE AS (
      SELECT MAX(dt) maxdate, MIN(dt) mindate
      FROM yourtable
      ),
    RecursiveCTE AS (
      SELECT mindate dtfield
      FROM CTE
      UNION ALL
      SELECT DATEADD(day, 1, dtfield)
      FROM RecursiveCTE R 
        JOIN CTE T
          ON R.dtfield < T.maxdate
      )
    

    MIN で始まる日付のリストが作成されます。 テーブルの日付と MAX で終わる日付 .

    問題 2:ここに correlated subquery があります 元のテーブルから最後の cnt を取得するのに便利です (私は通常それらから離れています):

    SELECT r.dtfield, 
       (SELECT TOP 1 cnt
        FROM yourtable 
        WHERE dt <= r.dtfield 
        ORDER BY dt DESC) cnt
    FROM RecursiveCTE r
    


    1. OracleSQL-すべての行で異なる乱数を使用して列を生成および更新します

    2. 解析エラー:構文エラー、予期しない'='エラー

    3. PL/SQLの反復で電話番号を特定する

    4. PHP /MYSQLJavascript-ボタンを使用してデータベースから取得した行の値をテキストフィールドに挿入します