Et je veux récupérer la "Désignation" pour la plus vieille d'entres elles:
Si je fais
Select Max(Year(GetDate()) - Year(Date))
From Table
Je récupère l'age de la plus vieille, mais à partir du moment ou je veux afficher la "Désignation" correspondante, je m'emmêle les pinceaux.
Select Désignation, (Year(GetDate()) - Year(Date)) As Age
From Table
Group By Désignation
Désormais s'affiche Toutes les "Désignation" et non plus uniquement la plus vieille
J'ai esseye des trucs du genre
Select Désignation
From Table
Where Year(GetDate()) - Year(Date) = Max(Year(GetDate()) - Year(Date))
mais il est vrai qu'on ne peut pas mettre d'aggregats dans un where alors j'ai tenté
Select Désignation
From Table
Group By Nom
Having Year(GetDate()) - Year(Date) = Max(Year(GetDate()) - Year(Date))
Mais là à nouveau je récupère toutes les lignes et non pas une seule.
Une idée, une piste, un conseil, sont les bienvenu.
Message édité par h4x0kz3r le 08-10-2003 à 11:59:26
Publicité
Posté le 03-10-2003 à 16:27:06
mrbebert
Posté le 03-10-2003 à 19:54:25
Je vois pas pourquoi tu veux faire une soustraction avec la date courante La plus ancienne, c'est celle qui a la date la plus "petite" (le min() de la colonne Date)
h4x0kz3r
Posté le 04-10-2003 à 02:36:36
Pour afficher l' "age", et pour calculer l'age il faut le calculer, mais sinon oui pour n'afficher que la "désignation" (min() ) suffit. Mais bon dans aucun des cas j'arrive à l'afficher, je bataille toujours avec la syntaxe.
HappyHarry
Posté le 04-10-2003 à 10:12:10
une solution bete :
select top 1 Désignation, (Year(GetDate()) - Year(Date)) As Age
From Table order by age desc
mais suppose qu'il n'y en a qu'une seule de plus ancienne
d'ou :
select blablabla from table where (Year(GetDate()) - Year(Date)) = (select max((Year(GetDate()) - Year(Date)) from Table)
Message édité par HappyHarry le 04-10-2003 à 13:44:32
lofo
Posté le 06-10-2003 à 18:01:18
voila un liens vers un site ou sont expliquer pas mal de choses de manières assez simple... si sa peut t'aider !
select top 1 designation
from table
order by date asc
by date desc
mais ca implique qu'il n'y a un qu'un seul enregistrement pour la date la plus récente, ca limite un peu
et pis grillaid pour celle la
Publicité
Posté le 07-10-2003 à 23:58:49
MagicBuzz
Posté le 08-10-2003 à 00:02:20
bah nan, le desc va prendre la plus récente non
sinon, pas compris la seconde phrase
PS: de toute façon, le having est plus propre et plus académique
h4x0kz3r
Posté le 08-10-2003 à 11:58:28
Citation :
ca doit pas t'empecher de spécifier la table sur laquelle doit etre faite la requete imbriquée
wooops
Pour le
Code :
select designation
from table
having date = min(date)
'Table.Désignation' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.
'Table.Date' is invalid in the HAVING clause because it is not contained in an aggregate function and there is no GROUP BY clause.
Et si je rajoute
Group By Désignation, Date
ça me renvoie à nouveau toutes le lignes
Mais bon avec la requete imbriqué ça marche impec, Merci beaucoup à tous
Nco95
Posté le 08-12-2010 à 12:09:45
il n'y a jamais de HAVING sans GROUP BY déjà (le having c'est le where du group by, sa retreint sur les groupes)
LA solution : Par exemple avec une de mes base voilà comment j'ai fait (la jointure est pas forcément obligatoire sa dépend des relations et tables) , je dois afficher l'avion le plus ancien de la compagnie Aero, donc pour toi c'est pareil sans la jointure :
SELECT numAvion FROM Avion JOIN Compagnie ON numCompAvion=numComp
WHERE dateMiseServiceAvion = (select MIN(dateMiseServiceAvion) from avion WHERE nomComp='Aero')
Message édité par Nco95 le 08-12-2010 à 13:29:24
jielbi
Posté le 08-12-2010 à 15:27:35
C'est moi ou y'a un déterrage de topic de la mort qui tue Depuis tout ce temps je lui souhaite quand même d'avoir trouvé sa réponse