Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/08/2011, 12h08   #1
Membre du Club
 
Inscription : février 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 73
Points : 57
Points : 57
Par défaut Regrouper par la valeur la plus récente

Bonjour,

Voici un rapide topo:
Des personnes peuvent faire des vœux de location (jusqu'à 4 maximum). A un vœu correspond son rang (ordre de priorité) et un code décision (réservation, affectation, refus...). Dans une table, je stocke l'historisation des demandes, càd dès qu'une modification d'un des vœux est faite.

Voici ce que ça donne :
Code :
1
2
3
4
5
6
7
8
9
| rang | date       | décision |
| 1    | 2011-04-12 | 00       |
| 2    | 2011-04-12 | 00       |
| 3    | 2011-04-12 | 00       |
| 4    | 2011-04-12 | 00       |
 
| 1    | 2011-04-22 | 10       |
 
| 1    | 2011-05-09 | 15       |
J'ai regroupé par date de modification des données. Au 12 avril, la personne a fait 4 vœux. Le 22 avril, le vœu 1 est passé en code 10 (affection). Au 09 mai, le vœu 1 est passé en code 15 (réservation).

Je voudrais faire une requête SQL qui me retourne les données suivantes :

Au 13 avril :
Code :
1
2
3
4
5
| rang | date       | décision |
| 1    | 2011-04-12 | 00       |
| 2    | 2011-04-12 | 00       |
| 3    | 2011-04-12 | 00       |
| 4    | 2011-04-12 | 00       |
Au 23 avril :
Code :
1
2
| rang | date       | décision |
| 1    | 2011-04-22 | 10       |
Au 10 mai :
Code :
1
2
| rang | date       | décision |
| 1    | 2011-05-09 | 15       |
Donc, cette requête ne doit me retourner que les éléments les plus récents en se basant sur la date. En passant par des group by, ça ne passe pas, tout comme en utilisant MAX().

Si quelqu'un à une solution, je suis preneur

Merci d'avance !
iliak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h11   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Pas sûr de tout comprendre mais je vais proposer un truc quand même qui devrait te mettre sur la voie de la solution.

Citation:
cette requête ne doit me retourner que les éléments les plus récents en se basant sur la date.
Soit une date D, par exemple le 23 avril 2011. Quelle est ou quelles sont la ou les données les plus récentes par rapport à cette date ?
=> ce sont les données qui ont la date maximum inférieure à la date D.
Code :
1
2
3
4
5
6
7
8
SELECT rang, `date`, decision
FROM la_table
WHERE `date` = 
(
    SELECT MAX(`date`)
    FROM la_table
    WHERE `date` < '2011-04-23'
)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h20   #3
Membre du Club
 
Inscription : février 2008
Messages : 73
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 73
Points : 57
Points : 57
Effectivement, en reformulant (donc en ayant un autre point de vue) ça parait évident...

Merci
iliak est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 18h50   #4
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Retraité
Inscription : novembre 2005
Messages : 2 530
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Activité : Retraité
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 530
Points : 3 523
Points : 3 523
Citation:
Envoyé par CinePhil Voir le message
Pas sûr de tout comprendre mais je vais proposer un truc quand même qui devrait te mettre sur la voie de la solution.


Soit une date D, par exemple le 23 avril 2011. Quelle est ou quelles sont la ou les données les plus récentes par rapport à cette date ?
=> ce sont les données qui ont la date maximum inférieure à la date D.
Code :
1
2
3
4
5
6
7
8
SELECT rang, `date`, decision
FROM la_table
WHERE `date` = 
(
    SELECT MAX(`date`)
    FROM la_table
    WHERE `date` < '2011-04-23'
)
Saluton,
Sauf, me semble-t-il mon cher Cinephil, qu'il faudrait corréler la sous-requête avec le rang.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
articles : Comment émuler un tableau croisé [quasi] dynamique
et : Une énigme mathématique résolue avec MySQL
recommande l'utilisation de PDO (PHP5 Data Objects)
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h38.


 
 
 
 
Partenaires

Hébergement Web