私は日付の列の値が過去7日以内にあるレコードの束を集計するデータベースビューを作成しています。これは次のようになります。SQLビューでgetdate()を使用しないようにするにはどうすればよいですか?
CREATE VIEW RecentRecordSum AS
SELECT t.ID,
SUM(t.SomeValue) AS ValueSum
FROM SomeTable t
WHERE t.RecordDate >= DATEADD(d,-7,GETDATE())
GROUP BY t.ID
where節でGETDATE()を直接実行しないと、これを行う方法はありますか?
私はSQL Server 2000および2005クエリプランを見てみるとGETDATE()呼び出しのコストは1よりもかなり複雑であるクエリ全体のわずか0.03%に(であることを示しているを使用してい
上記のように)、パフォーマンスは問題ではありませんが、私はクエリが決定論的であることが好きです。
理想的には、-7パラメータを列として公開して、ビューを照会するもののwhere句で使用できるようにしたいと思います。現在、私は7,14,28日のウィンドウのために少数のビューを検討しています。
CREATE VIEW RecentRecordSum AS
SELECT t.ID,
SUM(t.SomeValue) AS ValueSum
FROM SomeTable t
GROUP BY t.ID, t.RecordDate
HAVING t.RecordDate >= DATEADD(d,-7,GETDATE())
わかりません。 where句にないとどこになるのでしょうか?あなたが渡すパラメータのいくつかの並べ替えを考えていますか? – micahtan
これは、結果セットのすべての単一行に対してGETDATE()を評価する際のパフォーマンスが低下するのを避けるためのものです。 – Joe
なぜそれがすべての行について評価されると仮定していますか? – RedFilter