Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để nhận được ngày trung bình có trọng số thích hợp trong SQL

Rất có thể, một số ChargeOffDate của bạn là NULL , nhưng FaceValues của họ không.

Những bản ghi này không đóng góp vào tổng đầu tiên nhưng đóng góp vào tổng thứ hai.

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

Sử dụng cái này:

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. Cách dễ nhất để khác biệt hai lược đồ bảng trong SQL Server 2008?

  2. Tổng hợp chuỗi qua nhiều năm trong SQL Server

  3. Cách tổng hợp trường thời gian trong SQL Server

  4. Làm cách nào để kết nối với MS SQL Server bằng cách sử dụng Inno Setup?

  5. Cách di chuyển công việc máy chủ SQL từ một phiên bản máy chủ SQL sang phiên bản khác