Frage

Ich habe jetzt also eine Gruppierung der Werte nach Währungen und Werten, die die Werte der letzten 30 Tage anzeigt. Ich möchte jedoch nach Datum suchen und möglicherweise einen Parameter aus einer anderen Tabelle verwenden.

;WITH cte AS (SELECT ROW_NUMBER() OVER (ORDER BY date_loaded Asc) AS n, value, 
date_loaded, cast(round(value * 0.0001  / 100 * 0.5 + (value * 0.0001),4)AS dec(12,4)) as buy_rate,
        cast(round(value * 0.0001  / 100 * -0.5 + (value * 0.0001), 4) AS dec(12,4)) as sell_rate 

FROM texchange_rate WHERE source_currency_code = @source_currency_code 
and target_currency_code = @target_currency_code
and date_loaded between dateadd(day, datediff(day, 0 ,getdate())-30, 0) and getdate())

SELECT t2.value, t2.date_loaded, @source_currency_code as source_currency_code,
@target_currency_code as target_currency_code, t2.buy_rate, t2.sell_rate
    FROM cte t2 LEFT JOIN cte t1 ON t2.n = t1.n + 1
    WHERE t2.value <> ISNULL(t1.value, -1)

    order by date_loaded desc

END

Ich möchte die Anzahl der Tage, nach denen dateadd sucht, in einer separaten Tabelle definieren. Ist das möglich?Z.B.

aus

dateadd(day, datediff(day, 0 ,getdate())-30, 0) and getdate())

Zu

dateadd(day, datediff(day, 0 ,getdate())@dayparameter, 0) and getdate())

Damit das funktioniert, habe ich versucht, @dayparameter zu deklarieren (ähnlich wie hier – http://msdn.microsoft.com/en-us/library/ms186819%28v=sql.100%29.aspx, obwohl dies für Server 2008 gilt) am Anfang der gespeicherten Prozedur und das Einfügen in dateadd führt zu dem Fehler

MSG 102, Stufe 15, Status 1, Prozedur Proc_getCurrencyHistory, Zeile 48 Falsche Syntax in der Nähe von '@DayParameter'.

Ich hoffe, das macht Sinn.

War es hilfreich?

Lösung

Sie müssen noch eine Operation durchführen.Wenn Sie -30 übergeben möchten, müssen Sie addieren. Wenn Sie 30 übergeben möchten, müssen Sie subtrahieren.

Wenn @dayparameter ist -30:

dateadd(day, datediff(day, 0 ,getdate()) + @dayparameter, 0) and getdate())
-----------------------------------------^ this operator is important

Wenn @dayparameter ist 30:

dateadd(day, datediff(day, 0 ,getdate()) - @dayparameter, 0) and getdate())
-----------------------------------------^ this operator is still important
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top