FAIRE UN COUNT ET GROUPER PAR DATE AVEC LA MÉTHODE FLOOR

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 26 avril 2007 à 09:08
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009 - 3 mai 2007 à 10:10
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/42441-faire-un-count-et-grouper-par-date-avec-la-methode-floor

FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
3 mai 2007 à 10:10
Correction pour la forme...

si @dte1 = cast('02/05/2007 16:44:00' as datetime)
et @dte2 = cast('02/05/2007 00:00:00' as datetime)
alors
floor(cast(@dte1 as float)) = cast(@dte2 as float).

mais je suppose que tout le monde a compris le fond !
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
2 mai 2007 à 16:49
Explication de l'idée exposée par Nix :

La partie décimale de la conversion en nombre réel d'une variable DateTime correspond à l'heure ainsi,
si @dte = cast('02/05/2007 16:44:00' as datetime)
alors
floor(cast(@dte as float)) = cast('02/05/2007 00:00:00' as float).
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
2 mai 2007 à 14:02
Sur une table de 100 000 lignes j'ai mesuré un temps d'exécution de 290 ms au lieu de 540 ms.
La méthode est donc effectivement performante mais il ne faudrait pas oublier les règles de base. Dans ce cas, par exemple, il n'y a aucun intérêt à appliquer celle-ci : " le jeu n'en vaut pas la chandelle ".
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
2 mai 2007 à 10:17
L'optimisation passe par la création d'un index et la planification de sa défragmentation !
Quant à la remarque liée au contexte régional, il est toujours possible d'utiliser le format canonique.
Enfin, la lisibilité du code est un dernier argument pour une bonne maintenance.
Bref, je ne vois toujours qu'une complication inutile (cf. plan d'exécution).
cs_skweeky Messages postés 259 Date d'inscription mercredi 3 mai 2006 Statut Membre Dernière intervention 11 janvier 2010 8
29 avril 2007 à 13:04
C'est effectivement la méthode la plus lente en passant par un char...
Pour les comparaisons : http://blogs.codes-sources.com/christian/archive/2007/04/29/sql-server-conserver-la-date-ou-l-heure-d-un-datetime-comparaison-des-methodes.aspx
Nix Messages postés 831 Date d'inscription samedi 15 mai 1999 Statut Membre Dernière intervention 18 juillet 2009
27 avril 2007 à 18:18
Niveau perf en convertissant en char je ne suis pas sur que cela soit plus efficace. Surtout que cela peut impacter l'affichage du tri selon le context régionnal, si tu tries par date du coup le résultat est incertains.
Comme je l'ai il y a d'autres façons de faire. Celle que j'ai présenté est celle que j'utilise.
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
26 avril 2007 à 15:43
" Select Convert(Char(10), GetDate(), 103) " retourne la date sans l'heure... je ne vois pas la difficulté !

Select Convert(Char(10), MonChamp, 103) [Ma date], Count(MonChamp) [Mon compte]
From MaTable
Group by Convert(Char(10), MonChamp, 103)
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
26 avril 2007 à 09:08
Ca me plait, ça...
on evite les traitements propres aux dates, qui s'avèrent certainement très lents...
Rejoignez-nous