【发布时间】:2010-10-29 17:55:21
【问题描述】:
我正在编写一个数据库视图来总结一堆记录,其中日期列中的值在过去 7 天内。它看起来像这样:
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() 调用的成本仅为整个查询的 0.03%(这比上面的要复杂得多),因此性能不是问题,但是我喜欢我的查询是确定性的。
理想情况下,我还希望将 -7 参数公开为一列,以便可以在查询视图的 where 子句中使用它。目前,我正在考虑 7、14、28 天窗口的少量观看次数。
【问题讨论】:
-
不确定我是否理解这个问题。如果不在 where 子句中,它会在哪里?您是否在考虑传入的某种参数?
-
我假设这是为了避免为结果集的每一行评估 GETDATE() 对性能造成影响。
-
你为什么假设它是针对每一行进行评估的?
-
我不知道,但我不认为行为被定义为任何一种方式。
-
实际上是 DATEADD(d,-7,GETDATE()),确实是性能问题,与其说是被评估,不如说是因为它使得在 RecordDate 上使用索引不太可能,因为它是与表达式的比较。
标签: sql sql-server database view