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

Najlepszy sposób na interpolację wartości w SQL

Coś takiego (poprawione):

SELECT CASE WHEN next.Date IS NULL  THEN prev.Rate
            WHEN prev.Date IS NULL  THEN next.Rate
            WHEN next.Date = prev.Date  THEN prev.Rate
              ELSE ( DATEDIFF(d, prev.Date, @InputDate) * next.Rate 
                   + DATEDIFF(d, @InputDate, next.Date) * prev.Rate
                   ) / DATEDIFF(d, prev.Date, next.Date)
       END AS interpolationRate 
FROM
  ( SELECT TOP 1 
        Date, Rate 
    FROM Rates
    WHERE Date <= @InputDate
    ORDER BY Date DESC
  ) AS prev
  CROSS JOIN
  ( SELECT TOP 1 
        Date, Rate 
    FROM Rates
    WHERE Date >= @InputDate
    ORDER BY Date ASC
  ) AS next


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL między nie włącznie

  2. Zrozumienie rekurencyjnego sprawdzania zakończenia CTE

  3. Data Musi mieścić się w przedziale od 1/01 1753 12:00:00 AM i 12/31/9999 23:59:59 PM Błąd przepełnienia SqlBulkCopy

  4. Jak zmodyfikować okres przechowywania zmian przechwytywania danych (CDC) w programie SQL Server — samouczek dotyczący programu SQL Server

  5. Czy statystyki odnoszące się do kolumny zapobiegają usunięciu tej kolumny?