J'écris une vue de base de données pour résumer un groupe d'enregistrements où la valeur dans une colonne de date est au cours des 7 derniers jours. Il ressemble à ceci:Comment éviter l'utilisation de getdate() dans une vue 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
Est-il possible de le faire sans avoir l'GETDATE() directement dans la clause where?
J'utilise SQL Server 2000 et 2005.
En regardant le plan de requête montre que le coût de l'appel getdate() est seulement 0,03% de l'ensemble de la requête (ce qui est beaucoup plus complexe que celui ci-dessus), donc la performance n'est pas un problème, mais j'aime que mes requêtes soient déterministes.
Idéalement, je voudrais également exposer le paramètre -7 en tant que colonne afin qu'il puisse être utilisé dans la clause where de quelque chose interrogeant la vue. Actuellement, j'envisage un petit nombre de vues pour les fenêtres de 7, 14 et 28 jours.
Je ne sais pas si je comprends bien la question. Où serait-ce si ce n'était pas dans la clause where? Pensez-vous à une sorte de paramètre que vous transmettez? – micahtan
Je suppose que c'est pour éviter le coup de performance de l'évaluation de GETDATE() pour chaque ligne du jeu de résultats. – Joe
Pourquoi supposez-vous qu'il est évalué pour chaque rangée? – RedFilter