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

SQLで適切な加重平均日を取得するにはどうすればよいですか

    おそらく、あなたの ChargeOffDate の一部 は NULL です 、しかしそれらの FaceValues

    これらのレコードは最初の合計には含まれませんが、2 番目の合計には含まれます。

    WITH    q (ChargeOffDate, FaceValue) AS
            (
            SELECT  CAST('20030101' AS DATETIME), 1.0
            UNION ALL
            SELECT  CAST('20030201' AS DATETIME), 2.0
            UNION ALL
            SELECT  CAST('20030301' AS DATETIME), 3.0
            UNION ALL
            SELECT  NULL, 4.0
            )
    SELECT  CONVERT(DATETIME, SUM(CONVERT(FLOAT, ChargeOffDate) * FaceValue) / SUM(FaceValue))
    FROM    q
    
    ----
    1961-11-12 21:36:00.000
    

    これを使用:

    WITH    q (ChargeOffDate, FaceValue) AS
            (
            SELECT  CAST('20030101' AS DATETIME), 1.0
            UNION ALL
            SELECT  CAST('20030201' AS DATETIME), 2.0
            UNION ALL
            SELECT  CAST('20030301' AS DATETIME), 3.0
            UNION ALL
            SELECT  NULL, 4.0
            )
    SELECT  CONVERT(DATETIME, SUM(CONVERT(FLOAT, ChargeOffDate) * FaceValue) / SUM(FaceValue))
    FROM    q
    WHERE   ChargeOffDate IS NOT NULL
    
    ----
    2003-02-09 20:00:00.000
    



    1. PostgreSQLで短い月の名前を取得する

    2. DBクエリ時間の追跡-Bookshelf/knex

    3. PostgreSQLでのサーバーサイドプログラミングの概要

    4. PDOプリペアドステートメントとバインディングパラメータを理解する