Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1320 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Grouper en fonction d'une partie de champ datetime

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Grouper en fonction d'une partie de champ datetime

n°1599363
pepita8
do di dutty whine
Posté le 14-08-2007 à 12:22:52  profilanswer
 

Bonjour,
 
je cherche à extraire d'une table le nombre de parties jouées par jour. Voici ma requête qui ne marche pas. Les jours sont mentionnés dans le champ datetime :
 

Code :
  1. SELECT COUNT( * ) AS `parties`
  2. FROM score
  3. GROUP BY substring(datetime(19),9,2)


 
 
Savez-vous ce que je dois y changer ?
Merci

mood
Publicité
Posté le 14-08-2007 à 12:22:52  profilanswer
 

n°1599365
pepita8
do di dutty whine
Posté le 14-08-2007 à 12:31:33  profilanswer
 

J'ai aussi essayé ça sans succès :
 
SELECT COUNT( * ) AS `parties`
FROM score
GROUP BY DISTINCT `moment` AS substring( datetime( 19 ) , 9, 2 )

n°1599367
TheRom_S
Posté le 14-08-2007 à 13:01:41  profilanswer
 

essaie ça pour voir
 
SELECT COUNT( * ) AS `parties`, substring( datetime( 19 ) , 9, 2 ) AS `moment`
FROM score
GROUP BY DISTINCT `moment`
 
et tu devrais remplacer * par un champ précis


---------------
The Rom's, à votre service
n°1599368
casimimir
Posté le 14-08-2007 à 13:07:41  profilanswer
 

en oracle ce serait
 

Code :
  1. select trunc(datetime) jour,count(*) nbr_parties
  2. from score
  3. group by trunc(datetime)


 
cherche la fonction de ton sgbd qui tronque le jour

n°1599398
pepita8
do di dutty whine
Posté le 14-08-2007 à 14:14:03  profilanswer
 

Avant d'essayer une autre question, comme c'est une table qui est en prod et utilisée, on est d'accord que les requêtes que vous m'avez données ne vont pas modifier le contenu des champs datetime ?

n°1599404
ceyquem
E falso sequitur quodlibet
Posté le 14-08-2007 à 14:20:02  profilanswer
 

un SELECT ne fait que lire

n°1599892
MagicBuzz
Posté le 16-08-2007 à 09:51:18  profilanswer
 

TheRom_S a écrit :

essaie ça pour voir
 
SELECT COUNT( * ) AS `parties`, substring( datetime( 19 ) , 9, 2 ) AS `moment`
FROM score
GROUP BY DISTINCT `moment`
 
et tu devrais remplacer * par un champ précis


Dans le cas du COUNT(), c'est la seule exception où * ne pose pas de problème : cela indique au SGBD de ne faire de distinct sur aucun tuple.
On peut spécifier le champ de clé primaire à la place si on veut, mais lorsque la clé est composite, on perd en lisibilité :
 
Exemple :
J'ai une table produit (fam_id, pro_id, typpro, nompro) donc la clé primaire est (fam_id, pro_id).
Je veux le nombre de produits groupés par typpro :

Code :
  1. SELECT COUNT(fam_id) cpt, typpro
  2. FROM pro
  3. GROUP BY typpro


 
A première lecture, le dev qui passe derrière peut penser qu'on compte non pas le nombre de produits groupés par typpro, mais le nombre de fam_id différents par typpro. Mettre un "*" dans ce cas, permet au premier coup d'oeil d'isoler qu'on compte bien tout.

n°1600040
pepita8
do di dutty whine
Posté le 16-08-2007 à 14:47:50  profilanswer
 

Bonjour
J'ai modifié en mettant cette requête mais ça coince toujours :
 
SELECT COUNT( `date_played` ) AS `parties`, substring( `date_played`( 19 ) , 1, 10 ) AS `moment`
FROM score
GROUP BY DISTINCT `moment`
 
parce qu en fait mon champ DATE_PLAYED est celui qui contient l'heure. Voici la composition de la table SCORE car je crois m'être embrouillé dans ma demande :
 
  `id_score` int(11) NOT NULL auto_increment,
  `id_game` int(11) NOT NULL default '0',
  `id_user` int(11) NOT NULL default '0',
  `points` int(11) NOT NULL default '0',
  `time` int(10) unsigned NOT NULL default '0' ,
  `time_formated` varchar(100) NOT NULL default '0',
  `date_played` datetime NOT NULL default '0000-00-00 00:00:00' ,
  `id_week` tinyint(1) NOT NULL default '0',
 

n°1600052
MagicBuzz
Posté le 16-08-2007 à 15:01:03  profilanswer
 

group by :
- ne peut pas porter sur un alias
- distinct ? connait pas, ça fait déjà un distinct :heink:

n°1600054
MagicBuzz
Posté le 16-08-2007 à 15:02:49  profilanswer
 

SELECT COUNT(*) parties, substring(date_played, 1, 10 ) moment  
FROM score  
GROUP BY substring(date_played, 1, 10 )
 
Si ça marche pas, repose ta question, ou change de SGBD, parceque soit c'est ton cerveau qui fuit, soit c'est MySQL qui est une sous-merde.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Grouper en fonction d'une partie de champ datetime

 

Sujets relatifs
cherche une fonction qui me donnera un tracé précis[Résolu] Problème ActionScript - fonction onLoad
Update d'un champ txt vers un champs date[EXCEL] utiliser fonction excel dans VBA
fonction racineProblème avec la fonction "exec()"
Fonction pour md5 d'un fichier + compiler la libperte d'adresses à l'appel d'une fonction
probleme caractere (fonction mail)Désactivation champ dans un formulaire
Plus de sujets relatifs à : Grouper en fonction d'une partie de champ datetime


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR