Sto scrivendo una vista del database per riassumere un gruppo di record in cui il valore in una colonna della data è negli ultimi 7 giorni. Sembra qualcosa di simile:Come evitare l'uso di getdate() in una vista 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
Esiste un modo di fare questo senza avere la GETDATE() direttamente nella clausola dove?
sto usando SQL Server 2000 e il 2005.
Esaminando il piano di query mostra che il costo della chiamata GETDATE() è solo 0,03% di tutta la domanda (che è molto più complessa di quella sopra), quindi le prestazioni non sono un problema, tuttavia mi piace che le mie query siano deterministiche.
Idealmente mi piacerebbe anche esporre il parametro -7 come una colonna in modo che possa essere utilizzato nella clausola where di qualcosa che interroga la vista. Attualmente sto contemplando un numero limitato di visualizzazioni per finestre di 7, 14, 28 giorni.
Non sono sicuro se ho capito la domanda. Dove sarebbe se non nella clausola where? Stai pensando ad una sorta di parametro che passi? – micahtan
Sto assumendo che questo per evitare il colpo di prestazioni di valutare GETDATE() per ogni singola riga del set di risultati. – Joe
Perché pensi che sia valutato per ogni riga? – RedFilter