sql >> Database >  >> RDS >> Sqlserver

Hoe krijg ik een juiste gewogen gemiddelde datum in SQL?

Hoogstwaarschijnlijk zijn sommige van uw ChargeOffDate 's zijn NULL , maar hun FaceValues zijn niet.

Deze records dragen niet bij aan de eerste som, maar dragen wel bij aan de tweede.

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

Gebruik dit:

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. Hoe stel ik de waarde van een reeks automatisch elk jaar opnieuw in op 0 in Oracle 10g?

  2. Praktische processorselectie voor SQL Server 2014/2016 OLTP-workloads

  3. PostgreSQL kolommen naar rijen converteren? transponeren?

  4. Een DML-trigger maken in SQL Server