sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan får jeg en korrekt vægtet gennemsnitsdato i SQL

Sandsynligvis nogle af dine ChargeOffDate 's er NULL , men deres FaceValues er ikke.

Disse poster bidrager ikke til den første sum, men bidrager til den anden.

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

Brug denne:

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. SQL Query Hjælp efter 13. række Dynamiske og statiske værdier i 12. række med en formel

  2. MySql tilføjer en join giver forkerte resultater

  3. Sådan kopieres data og databasetabeller fra en database til en anden

  4. Tabelindeksering på PostgreSQL for ydeevne