sql >> Databáze >  >> RDS >> Sqlserver

Jak získám správné vážené průměrné datum v SQL

S největší pravděpodobností některé z vašich ChargeOffDate 's jsou NULL , ale jejich FaceValues nejsou.

Tyto záznamy nepřispívají do první částky, ale přispívají do druhé.

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

Použijte toto:

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. MariaDB JSON_CONTAINS_PATH() Vysvětleno

  2. Jak získat počet aktuálního měsíce neděle v psql?

  3. postgres pouze pomocí tříděného indexu pro dotazování tabulky 5m záznamů

  4. Postgres DB Trigger volá funkci Java