Tôi đang viết chế độ xem cơ sở dữ liệu để tổng hợp một loạt bản ghi có giá trị trong cột ngày trong vòng 7 ngày qua. Nó trông giống như thế này:Làm cách nào để tránh sử dụng getdate() trong chế độ xem 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
Có cách nào để thực hiện điều này mà không cần GETDATE() trực tiếp trong mệnh đề where?
Tôi đang sử dụng SQL Server 2000 và 2005.
Nhìn vào kế hoạch truy vấn cho thấy rằng chi phí của getdate() gọi là chỉ có 0,03% của toàn bộ truy vấn (đó là đáng kể phức tạp hơn so với cái ở trên), vì vậy hiệu suất không phải là một vấn đề, tuy nhiên tôi thích các truy vấn của tôi là xác định.
Lý tưởng nhất là tôi cũng muốn hiển thị tham số -7 làm cột để có thể sử dụng nó trong mệnh đề where của một cái gì đó đang truy vấn chế độ xem. Hiện tại tôi đang dự tính một số lượt xem nhỏ cho các cửa sổ 7, 14, 28 ngày.
Không chắc nếu tôi hiểu câu hỏi. Nó sẽ ở đâu nếu không ở trong mệnh đề where? Bạn đang nghĩ về một số loại tham số mà bạn vượt qua? – micahtan
Tôi giả định điều này là để tránh hiệu suất hit đánh giá GETDATE() cho mỗi hàng duy nhất của resultset. – Joe
Tại sao bạn cho rằng nó được đánh giá cho mỗi hàng? – RedFilter