Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да получа правилна среднопретеглена дата в SQL

Най-вероятно някои от вашите ChargeOffDate са NULL , но техните FaceValues не са.

Тези записи не допринасят за първата сума, но допринасят за втората.

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

Използвайте това:

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. Премахнете числата от string sql сървъра

  2. Кой е най-добрият начин да получите последния индекс на символ в SQL 2008

  3. PIVOT с тип данни varchar

  4. Заявка за актуализиране на SQL и „подзаявка върна повече от една стойност“

  5. Mvc-Mini-Profiler v1.7 на EF 4.1 Code-First проект не профилира SQL