sql >> Databasteknik >  >> RDS >> Sqlserver

Hur får jag ett korrekt viktat medeldatum i SQL

Troligtvis några av dina ChargeOffDate s är NULL , men deras FaceValues är inte.

Dessa poster bidrar inte till den första summan men bidrar till den andra.

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

Använd detta:

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. Uppföljning av Summer Performance Palooza 2013

  2. SQL Server-fel:ExecuteNonQuery:Anslutningsegenskapen har inte initierats

  3. Ersätt flera tecken i en sträng i SQL Server (T-SQL)

  4. Uppdatera en lista med saker utan att trycka på varje post