Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak uzyskać prawidłową średnią ważoną datę w SQL?

Najprawdopodobniej niektóre z Twoich ChargeOffDateNULL , ale ich FaceValues nie są.

Te zapisy nie wnoszą wkładu do pierwszej sumy, ale przyczyniają się do drugiej.

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

Użyj tego:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwracanie wartości z procedury składowanej

  2. Jak ograniczyć NULL jako parametr do procedury składowanej SQL Server?

  3. Typ danych zdefiniowany przez użytkownika i #temp table

  4. T-SQL:porównywanie dwóch tabel — rekordy, które nie istnieją w drugiej tabeli

  5. Równoległe przywracanie kopii zapasowej serwera SQL Server -2