Bonjour à tous,

Je travaille actuellement sur une grosse table ( > 1M lignes) et je souhaite faire une vues sur les ventes des 3 derniers mois :

J'ai essayer plusieurs méthode :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
CDDT > DATEADD(month, DATEDIFF(month, 0, GETDATE()) - 3, 0))
C'est sensé être propre mais c'est très long.


Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
CDDT > CASE WHEN (MONTH({ fn CURDATE() }) - 3) <= 0 THEN '01/' + CAST(12 - 3 + MONTH({ fn CURDATE() }) AS char(2)) 
                      + '/' + CAST(YEAR({ fn CURDATE() }) - 1 AS char(4)) ELSE '01/' + CAST(MONTH({ fn CURDATE() }) - 3 AS char(2)) + '/' + CAST(YEAR({ fn CURDATE() }) AS char(4)) END
C'est moche mais plus rapide que la première.

Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
CDDT > '01/07/2013'
Forcement c'est le plus rapide mais je perd le coté dynamique.

Actuellement je suis tombé sur un bon compromis pour exclure les années ultérieur sur lequel je veux pas faire de stats.
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
CDDT > '01/01/2013' AND CDDT > DATEADD(month, DATEDIFF(month, 0, GETDATE()) - 3, 0))

Ça me parait pas top et je suis sur qu'il y a une meilleurs façon de faire.
Ça eut paraitre futile de vouloir l'optimiser mais pour une requête de classification article cette vue est appelé 2000 fois donc chaque seconde compte

Si quelque à des conseils je suis preneur.

Merci d'avance