これまでの通貨と値で値をグループ化して、過去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'付近の構文が正しくありません。
希望はこれが理にかなっています。
私はどこでも '@のdays'が表示されません。あなたは '@ dayparameter'の代わりに' - @ dayparameter'を意味しましたか(マイナス記号に気付きましたか)? –
申し訳ありません。私は宣言を簡単にするために宣言の名前を変更しましたが、宣言は含めませんでした(例をコンテキストに反映させるために更新します)。それは '@ dayparameter' intであり、' @ dayparameters' = -30 – Rexxo
@Aaron Bertrandからの有効なポイントです。とにかく、あなたは、とにかくcteの外にある "from date"の計算を行うことができますか? – kaj