gpt4 book ai didi

sql - 如何避免在 SQL View 中使用 getdate()?

转载 作者:太空狗 更新时间:2023-10-30 01:47:14 24 4
gpt4 key购买 nike

我正在编写一个数据库 View 来总结一堆记录,其中日期列中的值在过去 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 参数公开为一个列,以便它可以在查询 View 的某些内容的 where 子句中使用。目前我正在考虑 7、14、28 天窗口的少量 View 。

最佳答案

您提出问题的一个原因可能是通过删除数据转换使 View 更易于优化。不能在 View 中执行此操作,您需要将其设为存储过程并将其转换为变量:

CREATE PROCEDURE RecentRecordSum AS

DECLARE @adate DATETIME

SELECT @adate = DATEADD(d, -7, GETDATE())

SELECT t.ID,
SUM(t.SomeValue) AS ValueSum
FROM SomeTable t
WHERE t.RecordDate >= @adate
GROUP BY t.ID

关于sql - 如何避免在 SQL View 中使用 getdate()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/923630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com