Group by SQL /MySQL
Résolu/Fermé
Archeus01
Messages postés
1571
Date d'inscription
mercredi 3 octobre 2007
Statut
Membre
Dernière intervention
9 juin 2022
-
7 nov. 2016 à 18:02
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 - 10 nov. 2016 à 16:34
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 - 10 nov. 2016 à 16:34
A voir également:
- Group by SQL /MySQL
- Mysql community server - Télécharger - Bases de données
- Gd group prélèvement - Forum Vos droits sur internet
- Sql lister les tables ✓ - Forum Programmation
- To be filled by o.e.m - Forum Windows
- Blob sql ✓ - Forum Webmastering
2 réponses
jee pee
Messages postés
40579
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
21 décembre 2024
9 460
Modifié par jee pee le 7/11/2016 à 18:27
Modifié par jee pee le 7/11/2016 à 18:27
Salut,
Avec Oracle je ferais un
Cdlt
un étranger, c'est un ami qu'on n'a pas encore rencontré.
Avec Oracle je ferais un
select date_creation, id_ligne, id_utilisateur from table where (date_creation,id_utilisateur) in (select max(date_creation), id_utilisateur from table group by id_utilisateur)
Cdlt
un étranger, c'est un ami qu'on n'a pas encore rencontré.
Archeus01
Messages postés
1571
Date d'inscription
mercredi 3 octobre 2007
Statut
Membre
Dernière intervention
9 juin 2022
450
Modifié par Archeus01 le 8/11/2016 à 10:11
Modifié par Archeus01 le 8/11/2016 à 10:11
Merci.
Tel quel, ça ne fonctionnait pas sur SQL Serveur. Mais bon, je m'en suis inspiré. Voici le résultat (et ça fonctionne même si je ne trouve pas que faire une sous-requête soit élégant).
select R.id_ligne, R.date_creation, from table R
join
(select max(date_creation) d, id_utilisateur p from table group by id_utilisateur) as RTEMP
on RTEMP.p = r.id_utilisateur and RTEMP.d = r.date_creation
Tel quel, ça ne fonctionnait pas sur SQL Serveur. Mais bon, je m'en suis inspiré. Voici le résultat (et ça fonctionne même si je ne trouve pas que faire une sous-requête soit élégant).
select R.id_ligne, R.date_creation, from table R
join
(select max(date_creation) d, id_utilisateur p from table group by id_utilisateur) as RTEMP
on RTEMP.p = r.id_utilisateur and RTEMP.d = r.date_creation
jee pee
Messages postés
40579
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
21 décembre 2024
9 460
Modifié par jee pee le 8/11/2016 à 11:32
Modifié par jee pee le 8/11/2016 à 11:32
L'élégance ;-)
Tu résonnes avec ta connaissance des données dans ta base.
En mysql sur ta table quelle serait la réponse à
select max(date_creation), min(date_creation), id_ligne, id_utilisateur from table
group by id_utilisateur
Tu résonnes avec ta connaissance des données dans ta base.
En mysql sur ta table quelle serait la réponse à
select max(date_creation), min(date_creation), id_ligne, id_utilisateur from table
group by id_utilisateur
Archeus01
Messages postés
1571
Date d'inscription
mercredi 3 octobre 2007
Statut
Membre
Dernière intervention
9 juin 2022
450
>
jee pee
Messages postés
40579
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
21 décembre 2024
Modifié par Archeus01 le 10/11/2016 à 16:53
Modifié par Archeus01 le 10/11/2016 à 16:53
dans ma tête; c'était impossible de faire la requête demandée. J'allais avoir une erreur MySql, alors j'ai testé, c'est passé et je ne comprends pas. Mais alors plus du tout.
Je ne comprends pas max et min finalement....
Je viens de tester
CREATE TABLE `user` (
`id_ligne` int(11) NOT NULL,
`id_utilisateur` int(11) NOT NULL,
`date_creation` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `user` (`id_ligne`, `id_utilisateur`, `date_creation`) VALUES
(1, 1, '2016-11-01'),
(2, 1, '2016-11-02'),
(3, 1, '2016-11-03');
select max(date_creation), id_ligne, id_utilisateur from user
Je m'attendais à avoir un id_ligne = 3 , résultat :
date_creation : '2016-11-03'
Id utilisateur : 1
id_ligne : 1 (WHAT?)
J'ai lu plein de fois qu'on ne sait pas ce qu'on fait en MySql en mode permissif. Sans cas concret, je ne comprenais pas pourquoi. Vive l'argument massue.
[EDIT]
Tiens, je viens de voire un truc intéressant qui m'apprends que faire des sous-requêtes, ce n'est pas forcément mal : www.lafabriquedecode.com/blog/2013/06/mysql-max/
[EDIT2] Je viens de comprendre ta requête... C'est super logique que le moteur la laisse passer.
Je ne comprends pas max et min finalement....
Je viens de tester
CREATE TABLE `user` (
`id_ligne` int(11) NOT NULL,
`id_utilisateur` int(11) NOT NULL,
`date_creation` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `user` (`id_ligne`, `id_utilisateur`, `date_creation`) VALUES
(1, 1, '2016-11-01'),
(2, 1, '2016-11-02'),
(3, 1, '2016-11-03');
select max(date_creation), id_ligne, id_utilisateur from user
Je m'attendais à avoir un id_ligne = 3 , résultat :
date_creation : '2016-11-03'
Id utilisateur : 1
id_ligne : 1 (WHAT?)
J'ai lu plein de fois qu'on ne sait pas ce qu'on fait en MySql en mode permissif. Sans cas concret, je ne comprenais pas pourquoi. Vive l'argument massue.
[EDIT]
- va creuser sur le net pour comprendre*
Tiens, je viens de voire un truc intéressant qui m'apprends que faire des sous-requêtes, ce n'est pas forcément mal : www.lafabriquedecode.com/blog/2013/06/mysql-max/
[EDIT2] Je viens de comprendre ta requête... C'est super logique que le moteur la laisse passer.