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 :
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 > DATEADD(month, DATEDIFF(month, 0, GETDATE()) - 3, 0))
C'est moche mais plus rapide que la première.
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
Forcement c'est le plus rapide mais je perd le coté dynamique.
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2CDDT > '01/07/2013'
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
Partager