2012-03-08 5 views
0

これまでの通貨と値で値をグループ化して、過去30日間の値を表示していますが、最終的に別のテーブルのパラメータを使用します。日付検索のパラメータを定義するDATEADD/datediff - SQLサーバー2005

;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 

dateaddが別のテーブルから検索する日数を定義したいのですが、これは可能ですか?例えば。 ( - これはサーバー2008のためにではあるが、http://msdn.microsoft.com/en-us/library/ms186819%28v=sql.100%29.aspxここに類似)開始時に

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

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

から

ただ、この作業を取得するために、私は宣言@dayparameterしようとしてきましたをストアドプロシージャの中に配置し、dateaddに配置するとエラーが発生します。

メッセージレベル102、レベル15、状態1、プロシージャプロc_getCurrencyHistory、Line 48 '@dayparameter'付近の構文が正しくありません。

希望はこれが理にかなっています。

+2

私はどこでも '@のdays'が表示されません。あなたは '@ dayparameter'の代わりに' - @ dayparameter'を意味しましたか(マイナス記号に気付きましたか)? –

+0

申し訳ありません。私は宣言を簡単にするために宣言の名前を変更しましたが、宣言は含めませんでした(例をコンテキストに反映させるために更新します)。それは '@ dayparameter' intであり、' @ dayparameters' = -30 – Rexxo

+1

@Aaron Bertrandからの有効なポイントです。とにかく、あなたは、とにかくcteの外にある "from date"の計算を行うことができますか? – kaj

答えて

1

操作を実行する必要があります。 -30を渡したい場合は、追加する必要があります.30を渡す場合は、引き算する必要があります。

@dayparameter場合は-30です:

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

@dayparameter場合は30です:

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

ああ!素晴らしい、あなたのサポートに感謝します。 – Rexxo

関連する問題