A voir également:
- SQL reqûete
- Blob sql ✓ - Forum Webmastering
- Récupération serveur sql - Télécharger - Gestion de données
- Sql lister les tables ✓ - Forum Programmation
- Requête sql doublons sur 2 champs ✓ - Forum Programmation
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
2 réponses
blux
Messages postés
26020
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
3 mai 2024
3 289
21 nov. 2011 à 16:36
21 nov. 2011 à 16:36
Salut,
tu fais fausse route, mais étant encore à l'université, tu devrais trouver ce qu'il faut dans tes cours...
tu fais fausse route, mais étant encore à l'université, tu devrais trouver ce qu'il faut dans tes cours...
vordano
Messages postés
1682
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
316
21 nov. 2011 à 16:50
21 nov. 2011 à 16:50
bon, pour la réponse a ta demande:
a première vue on peux penser qu'il faut utiliser la fonction MAX(), sauf que celle ci est utilisable dans le select, et que dans ton cas on ne veux pas renvoyer le maximum d'un champ, mais seulement le champ d'a coté.
dans ce cas, on serais tenté de faire un DateSalaire=MAX(DateSalaire) en mettant le salaire dans le select.
mais comme je l'ai dis plus haut le MAX() se fait dans le select (dans le where c'est pas accepté partout)
donc il y a 2 solution je pense:
select salaire
from table
where datasalaire=(select max(datesalaire) from table where numemp = "truc")
and numemp = "truc";
ou bien
select salaire
from table
where numemp="truc"
order by datesalaire DESC
limit 1;
a première vue on peux penser qu'il faut utiliser la fonction MAX(), sauf que celle ci est utilisable dans le select, et que dans ton cas on ne veux pas renvoyer le maximum d'un champ, mais seulement le champ d'a coté.
dans ce cas, on serais tenté de faire un DateSalaire=MAX(DateSalaire) en mettant le salaire dans le select.
mais comme je l'ai dis plus haut le MAX() se fait dans le select (dans le where c'est pas accepté partout)
donc il y a 2 solution je pense:
select salaire
from table
where datasalaire=(select max(datesalaire) from table where numemp = "truc")
and numemp = "truc";
ou bien
select salaire
from table
where numemp="truc"
order by datesalaire DESC
limit 1;
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
21 nov. 2011 à 17:07
21 nov. 2011 à 17:07
Bonjour,
Ça ne répond pas tout-à-fait à la question, qui précise :
« Écrire en SQL la req permettant d'avoir pour chaque employé son numéro et son dernier salaire »
Les numemp="truc" sont donc de trop, il faut les remplacer par des group by.
Xavier
Ça ne répond pas tout-à-fait à la question, qui précise :
« Écrire en SQL la req permettant d'avoir pour chaque employé son numéro et son dernier salaire »
Les numemp="truc" sont donc de trop, il faut les remplacer par des group by.
Xavier
vordano
Messages postés
1682
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
316
21 nov. 2011 à 17:20
21 nov. 2011 à 17:20
... j'avais pas vu le pour chaque employé
donc oui ta méthode est bonne, mais la mienne c'est pour un seul employé donné
donc oui ta méthode est bonne, mais la mienne c'est pour un seul employé donné
21 nov. 2011 à 16:39
21 nov. 2011 à 16:41
Qu'entends tu par "faire fausse route " ? Je pense aussi que je m'oriente peut etre mal, et c'est pour ça que j'ai créé ce post.
21 nov. 2011 à 16:45
21 nov. 2011 à 16:53
21 nov. 2011 à 17:00
MySQL par exemple est permissif, et permet de récupérer un champ qui n'est ni une fonction d'agrégat, ni spécifié dans les champs agrégés. Dans la plupart des cas, ce n'est à utiliser que si la colonne en question a toujours la même valeur ; mais dans le cas des fonctions d'agrégat MIN et MAX, cela donne la valeur correspondante à la ligne qui contient ce MIN ou ce MAX.
Cf la doc : http://dev.mysql.com/doc/refman/5.0/fr/group-by-hidden-fields.html
Donc en MySQL, la requête suivante fonctionne :
SELECT NumEmp, MAX(DateSalaire), Salaire
FROM HISTO_SALAIRE
GROUP BY NumEmp
Par contre, comme précisé dans la doc, ce n'est pas du SQL standard, et cela ne fonctionnera pas avec d'autres SGBD. Dans les autres, il faudra faire une sous-requête pour cibler exactement la ligne souhaitée dans la table.
Xavier