Grouper en fonction d'une partie de champ datetime - SQL/NoSQL - Programmation
Marsh Posté le 14-08-2007 à 12:31:33
J'ai aussi essayé ça sans succès :
SELECT COUNT( * ) AS `parties`
FROM score
GROUP BY DISTINCT `moment` AS substring( datetime( 19 ) , 9, 2 )
Marsh Posté le 14-08-2007 à 13:01:41
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
Marsh Posté le 14-08-2007 à 13:07:41
en oracle ce serait
Code :
|
cherche la fonction de ton sgbd qui tronque le jour
Marsh Posté le 14-08-2007 à 14:14:03
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 ?
Marsh Posté le 16-08-2007 à 09:51:18
TheRom_S a écrit : essaie ça pour voir |
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 :
|
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.
Marsh Posté le 16-08-2007 à 14:47:50
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',
Marsh Posté le 16-08-2007 à 15:01:03
group by :
- ne peut pas porter sur un alias
- distinct ? connait pas, ça fait déjà un distinct
Marsh Posté le 16-08-2007 à 15:02:49
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.
Marsh Posté le 14-08-2007 à 12:22:52
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 :
Savez-vous ce que je dois y changer ?
Merci