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

Spojení SQL proti rozsahům dat?

Nejprve byste se mohli sami připojit ke směnným kurzům, které jsou seřazeny podle data, abyste měli počáteční a koncové datum každého směnného kurzu bez jakéhokoli překrývání nebo mezery v datech (můžete to přidat jako pohled do své databáze - v mém případě používám pouze běžný tabulkový výraz).

Nyní je spojení těchto „připravených“ sazeb s transakcemi jednoduché a efektivní.

Něco jako:

WITH IndexedExchangeRates AS (           
            SELECT  Row_Number() OVER (ORDER BY Date) ix,
                    Date,
                    Rate 
            FROM    ExchangeRates 
        ),
        RangedExchangeRates AS (             
            SELECT  CASE WHEN IER.ix=1 THEN CAST('1753-01-01' AS datetime) 
                    ELSE IER.Date 
                    END DateFrom,
                    COALESCE(IER2.Date, GETDATE()) DateTo,
                    IER.Rate 
            FROM    IndexedExchangeRates IER 
            LEFT JOIN IndexedExchangeRates IER2 
            ON IER.ix = IER2.ix-1 
        )
SELECT  T.Date,
        T.Amount,
        RER.Rate,
        T.Amount/RER.Rate ConvertedAmount 
FROM    Transactions T 
LEFT JOIN RangedExchangeRates RER 
ON (T.Date > RER.DateFrom) AND (T.Date <= RER.DateTo)

Poznámky:

  • Můžete nahradit GETDATE() s datem v daleké budoucnosti, zde předpokládám, že nejsou známy žádné sazby pro budoucnost.

  • Pravidlo (B) je implementováno nastavením data prvního známého směnného kurzu na minimální datum podporované SQL Serverem datetime , což by mělo (podle definice, pokud je to typ, který používáte pro Date sloupec) být nejmenší možná hodnota.



  1. Spustit MySQL INSERT Query vícekrát (vložit hodnoty do více tabulek)

  2. Mapování sériového typu PostgreSQL s poznámkami Hibernate

  3. K tomuto připojení je již přidružen otevřený DataReader, který musí být nejprve uzavřen + asp.net mvc

  4. Vkládání více objektů slovníku do databáze MySQL pomocí pythonu a MySQLdb