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

T-SQLの前月のデータに基づいて欠落月の値を決定する方法

    まず、1から100万程度の整数を保持するNumbersテーブルを作成します。一度コツをつかめば、とても便利です。

    たとえば、2008年の毎月1日を取得する方法は次のとおりです。

    select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
    from Numbers
    where n <= 12;
    

    これで、OUTER APPLYを使用してそれをまとめ、次のように各日付の最新のトランザクションを見つけることができます。

    with Dates as (
        select firstOfMonth = dateadd( month, n - 1, '1/1/2008')
        from Numbers
        where n <= 12
    )
    select d.firstOfMonth, t.TransactionValue
    from Dates d
    outer apply (
        select top 1 TransactionValue
        from Transactions
        where TransactionDate <= d.firstOfMonth
        order by TransactionDate desc
    ) t;
    

    これであなたが探しているものが得られるはずですが、Numbersテーブルを作成するための最良の方法を見つけるために少しGoogleに行く必要があるかもしれません。



    1. JDBCを使用してストアドプロシージャから*すべて*を取り戻す方法

    2. sqlachemyのhave句でラベルを使用する

    3. 演算子が存在しません:json =json

    4. phpとmysqlでステートメントを実行できません