Requête sql select
Résolu
okbabb
Messages postés
57
Date d'inscription
Statut
Membre
Dernière intervention
-
heliconius Messages postés 539 Date d'inscription Statut Membre Dernière intervention -
heliconius Messages postés 539 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
table "employe" :
ID nom
1 Michel
2 David
3 Natalie
table "grades" :
id_grade nom_grade
1 Adjudant
2 Adjudant-chef
3 Lieutenant
4 Capitaine
5 Commandant
6 Colonel
table "grades_employes" :
id_grade_employe id_grade date_grade ID
1 1 2020-01-01 1
2 3 2020-01-01 2
3 5 2020-01-01 3
4 2 2022-01-01 1
5 4 2022-01-01 2
6 6 2022-01-01 3
J'ai essayé de faire une liste des employes avec grade (chacun son "date_grade" le plus récent) comme suit:
nom nom_grade
Michel Adjudant-chef
David Capitaine
Natalie Colonel
Mon code:
Mais je n'arrive pas à résoudre cette requête
Merci.
table "employe" :
ID nom
1 Michel
2 David
3 Natalie
table "grades" :
id_grade nom_grade
1 Adjudant
2 Adjudant-chef
3 Lieutenant
4 Capitaine
5 Commandant
6 Colonel
table "grades_employes" :
id_grade_employe id_grade date_grade ID
1 1 2020-01-01 1
2 3 2020-01-01 2
3 5 2020-01-01 3
4 2 2022-01-01 1
5 4 2022-01-01 2
6 6 2022-01-01 3
J'ai essayé de faire une liste des employes avec grade (chacun son "date_grade" le plus récent) comme suit:
nom nom_grade
Michel Adjudant-chef
David Capitaine
Natalie Colonel
Mon code:
SELECT nom,nom_grade FROM employes,grades,grades_employes WHERE grades.id_grade=grades_employes.id_grade AND (SELECT MAX(date_grade) FROM grades_employes WHERE grades_employes.ID=employes.ID AND grades.id_grade=grades_employes.id_grade)
Mais je n'arrive pas à résoudre cette requête
Merci.
A voir également:
- Requête sql select
- Requete sql pix ✓ - Forum MySQL
- Logiciel sql - Télécharger - Bases de données
- Please select boot device - Forum Windows
- Reboot and select proper boot device asus - Forum Matériel & Système
- Blob sql ✓ - Forum Webmastering
4 réponses
Bonjour,
Tu n'as pas de message d'erreur ?
Il me semble qu'il manque des choses : tu as un from avec 3 tables, tu devrais avoir 2 conditions entre ces 3 tables, il manque la condition entre employes et grades_employes, puis avant ton sous select, tu devrais avoir un nom de champ
Tu n'as pas de message d'erreur ?
Il me semble qu'il manque des choses : tu as un from avec 3 tables, tu devrais avoir 2 conditions entre ces 3 tables, il manque la condition entre employes et grades_employes, puis avant ton sous select, tu devrais avoir un nom de champ
AND grades_employes.date_grades = (select
non, il n'ya pas de message d'erreur, mais la requête donne le résultat faux suivante:
nom nom_grade
Michel Adjudant
David Lieutenant
Natalie Commandant
Michel Adjudant-chef
David Capitaine
Natalie Colonel
nom nom_grade
Michel Adjudant
David Lieutenant
Natalie Commandant
Michel Adjudant-chef
David Capitaine
Natalie Colonel
Bonjour,
j'essaye de résumer avec mes mots (je reconnais avoir du mal quand le nom des tables et des champs ne correspondent pas à la réalité. Mais ça ne regarde que moi). En clair, si j'ai bien compris, en Merise ça donnerait le MCD :
Cardinalités :
-- côté employé = 1,n : tout employé a au minimum 1 grade mais peut en avoir eu plusieurs
-- côté grade = 0,n : un grade peut ne pas être attribué mais peut l'être plusieurs fois (0 général mais plusieurs adjudants)
Selon moi, je modéliserais ainsi (désolé, j'ai toujours évité les noms de champ à rallonge: ça complique la lecture et c'est générateur d'erreurs et j'évite les accents) Les clefs primaires sont soulignées :
Employes (ide, nom, prenom)
Grades (idg, grade)
Avoir (ide, idg, dprom)
NB: dprom = date promotion
Ma requête serait la suivante :
ORDER :
j'essaye de résumer avec mes mots (je reconnais avoir du mal quand le nom des tables et des champs ne correspondent pas à la réalité. Mais ça ne regarde que moi). En clair, si j'ai bien compris, en Merise ça donnerait le MCD :
[Employé]--1,n-----(avoir)-----0,n--[Grade]
Cardinalités :
-- côté employé = 1,n : tout employé a au minimum 1 grade mais peut en avoir eu plusieurs
-- côté grade = 0,n : un grade peut ne pas être attribué mais peut l'être plusieurs fois (0 général mais plusieurs adjudants)
Selon moi, je modéliserais ainsi (désolé, j'ai toujours évité les noms de champ à rallonge: ça complique la lecture et c'est générateur d'erreurs et j'évite les accents) Les clefs primaires sont soulignées :
Employes (ide, nom, prenom)
Grades (idg, grade)
Avoir (ide, idg, dprom)
NB: dprom = date promotion
Ma requête serait la suivante :
SELECT grade, nom, prenom, dprom FROM Employes, Avoir, Grades WHERE Employes.ide=Avoir.ide AND Grades.idg=Avoir.idg ORDER BY dprom DESC;
ORDER :
ORDER BY nom,prenom,dprom DESC;// ordre alpha des noms, prenom avec leur dates décroissantes de promotion pour chacun
ORDER by dprom DESC,nom,prenom;// De la promotion la plus récente à la plus ancienne et pour une même date par nom, prenom