Я пишу представление базы данных, чтобы суммировать кучу записей, где значение в столбце даты находится за последние 7 дней. Это выглядит примерно так:Как избежать использования getdate() в представлении SQL?
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
Есть ли способ сделать это, не имея GETDATE() непосредственно в пункте где?
Я использую SQL Server 2000 и 2005.
Глядя на план запроса показывает, что стоимость вызова GETDATE() составляет лишь 0,03% от всего запроса (который является значительно более сложным, чем один выше), поэтому производительность не является проблемой, однако мне нравится, что мои запросы детерминированы.
В идеале я также хотел бы показать параметр -7 как столбец, чтобы он мог использоваться в предложении where чего-либо, запрашивающего представление. В настоящее время я рассматриваю небольшое количество просмотров для окон 7, 14, 28 дней.
Не уверен, если я понимаю этот вопрос. Где бы это было, если бы не в предложении where? Вы думаете о каком-то параметре, который вы проходите? – micahtan
Я предполагаю, что это делается для того, чтобы избежать удара производительности при оценке GETDATE() для каждой отдельной строки набора результатов. – Joe
Почему вы предполагаете, что он оценивается для каждой строки? – RedFilter