begin process at 2010 02 10 05:21:52
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

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

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


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Trucs & Astuces Classé sous :count, date, floor, datetime, groupby Niveau :Débutant Date de création :25/04/2007 Vu :6 963

Auteur : Nix

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note


 Description

Il m'est souvent arrivé de devoir faire un Count en groupant par date avec un champ datetime comprennant la date et l'heure. Je n'ai pas trouvé de fonctionnalité par défaut qui permette de convertir en date (sans l'heure) dans SQL, mais la méthode FLOOR on peut facilement le faire.
Le but de la requête ci-dessous est de regrouper ces dates pour faire un count.

Source

  • SELECT
  • DATEADD(d,0,FLOOR(CONVERT(float,ChampDate))) As LaDate,
  • COUNT(ChampACompter) As Compte
  • FROM
  • MaTable
  • GROUP BY
  • FLOOR(CONVERT(float,ChampDate))
SELECT 
	DATEADD(d,0,FLOOR(CONVERT(float,ChampDate))) As LaDate,
	COUNT(ChampACompter) As Compte 
FROM 
	MaTable
GROUP BY 
	FLOOR(CONVERT(float,ChampDate))

 Conclusion

Il y a peut-être d'autres façons de faire, mais celle-ci est simple et efficace.


 Sources de la même categorie

Source avec Zip Source avec une capture SQL SERVER - GENERATION AUTOMATIQUE D'UNE RETRO-DOCUMENTATIO... par FENETRES
[SQL SERVEUR] VÉRIFIER L'ESPACE OCCUPÉ DANS UNE BASE DE DONN... par Hyperion
TROUVER LES PROCHAINS ANNIVERSAIRES par zefo
REQUÊTE SQL POUR DÉTERMINER L'ESPACE OCCUPÉ DANS LES TABLESP... par sgoriaud
SQL SERVER - OBTENIR LES VALEURS CORRESPONDANT A DES UNICODE par fabrice69

 Sources en rapport avec celle ci

Source avec Zip CALCUL UNE DIFFÉRENCE DE DATE EN FONCTION DE JOURS FÉRIÉS/TR... par Sieurcoug
[ORACLE]DÉTERMINER LA DATE DU PREMIER JOUR D'UNE SEMAINE PAR... par Bouillou2
TROUVER LES PROCHAINS ANNIVERSAIRES par zefo
AJOUT , SUPPRESSION INTERVALLE DE TEMPS EN PLSQL par lamjed
DERNIER JOUR DU MOIS, OU DE LA SEMAINE par pifou25

Commentaires et avis

Commentaire de Renfield le 26/04/2007 09:08:12 administrateur CS

Ca me plait, ça...
on evite les traitements propres aux dates, qui s'avèrent certainement très lents...

Commentaire de FENETRES le 26/04/2007 15:43:00


" 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)

Commentaire de Nix le 27/04/2007 18:18:28 administrateur CS

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.

Commentaire de skweeky le 29/04/2007 13:04:49 administrateur CS

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

Commentaire de FENETRES le 02/05/2007 10:17:09

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).

Commentaire de FENETRES le 02/05/2007 14:02:43

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 ".

Commentaire de FENETRES le 02/05/2007 16:49:39

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).

Commentaire de FENETRES le 03/05/2007 10:10:59

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 !

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

DATETIME SQL SERVER AU SECOURS !!!!!! [ par MACHOMAN ] bonjour, j'ai plusieurs pb avec les datetime sous sql server : 1 - j'ai deux champs datetime, dans le premier il y a une date dans le second une heure test si string (datetime) est correct. [ par tmcuh ] Voil&#224; un big soucis avec SQL. Je r&#233;cup&#232;re une donn&#233;e de type char[10] provenant d'une table (qui ne m'appartient pas) et je dois t dates qui plantent tout !! [ par chamallow ] Bonjour,Alors voil&#224;, j'utilise une base SQL SERVER. Pour me rassurer, il n'existe pas de type date pour ce type de base non? (J'utilise datetime, sql server 2000 + probleme de datetime ! [ par jimmy69 ] Bonjour,Dans une db sous sql server 2000 on a une table qui utilise une colonne de type datetime.J'aimerais savoir quelle est la query SQL à utiliser difference entre deux datetime en heures!! [ par othland ] Bonjour, tout le monde,je développe sous delphi en relation avec une BD SQL server.j'ai deux champ de type datetime (de ce genre : DD/MM/YYYY HH:MM:SS VB.net 2005 et SQL 2005 Express : Prbl DateTime [ par morleys ] Bonjour &#224; vous tous,Je coince voil&#224; quelque temps sur un probleme d'enregistrement de date SQL 2005.Si j'ai toto = Cdate(Now())&nbsp;&nbsp;& convert string to date [ par sofiesofie ] salut,j'ai une table "matable"(num, date) tel que date de type datetime.dans ma formulaire la date est de type string (string d="24/05/2008").pour fai [SQL] date - n heures [ par remifalcon ] Bonjour, après avoir chercher différents tuto, je viens vers vous pour ce problème:Je cherche à faire une requète SQL me renvoyant toutes les lignes ( sql server datetime [ par brmdevinci ] svp j'execute cette requete " select * from personne where date_nais='12/02/1986'" la resultat est un tableau vide sachant que quand j'ai remplit la Probleme dans un requete aide moi svp!! [ par cybercop ] bjr a tt, bon je suis en sql server 2005 express , j'ai 1 prb dans un requette la condition n'est affiche pas aucun resultat .il ma donne un erreur  <


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales