SQL reqûete
maxime
-
maxime -
maxime -
Bonjour,
J'ai un petit service à vous demander...voilà j'ai une requête tout bête qui me pose problème...
Ecrire en SQL la req permettant d'avoir pour chaque employé son numéro et son dernier salaire
table HISTO_SALAIRE (NumEmp, DateSalaire, Salaire)
cette table mémorise tous les changements de salaires des employé...
Jme prend la tête avec cette requête, je me doute que le début est :
Select NumEmp, DateSalaire
from HISTO_SALAIRE
...
Je sais pas s'il faut mettre un MAX dans un Having ou un Group by...
c'est aprés le FROM que je doute...si vous pouviez m'aider svp :)
Cordialement,
J'ai un petit service à vous demander...voilà j'ai une requête tout bête qui me pose problème...
Ecrire en SQL la req permettant d'avoir pour chaque employé son numéro et son dernier salaire
table HISTO_SALAIRE (NumEmp, DateSalaire, Salaire)
cette table mémorise tous les changements de salaires des employé...
Jme prend la tête avec cette requête, je me doute que le début est :
Select NumEmp, DateSalaire
from HISTO_SALAIRE
...
Je sais pas s'il faut mettre un MAX dans un Having ou un Group by...
c'est aprés le FROM que je doute...si vous pouviez m'aider svp :)
Cordialement,
A voir également:
- SQL reqûete
- Logiciel sql - Télécharger - Bases de données
- Jointure sql ✓ - Forum MySQL
- Requête sql pour afficher uniquement les fleurs dont le prix est strictement inférieur à 10 euros ✓ - Forum DS
- Sql (+) - Forum Programmation
- Sql lister les tables ✓ - Forum Programmation
2 réponses
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...
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;
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.
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