Problème de requête [--RESOLVED--] [SQL server] - SQL/NoSQL - Programmation
Marsh 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)
Marsh 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.
Marsh 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)
Marsh 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 !
http://sqlpro.developpez.com/indexSQL.html
Marsh Posté le 07-10-2003 à 21:39:17
Select Désignation
From Table
Where Year(GetDate()) - Year(Date) = Select(Max(Year(GetDate()) - Year(Date)))
Erreur au second Select
C'est quand même bizarre qu'on ne puisse pas afficher la Dés. correspondante à un calcul (aggregat)
Lofo merci du link =) je n'ai pas encore trouvé comment afficher ma dés mais je ne désespère pas!
Marsh Posté le 07-10-2003 à 22:53:17
h4x0kz3r a écrit : Select Désignation |
ca doit pas t'empecher de spécifier la table sur laquelle doit etre faite la requete imbriquée
Marsh Posté le 07-10-2003 à 23:57:12
select designation |
Ou plus simple (mais moins propre)
select top 1 designation |
Marsh Posté le 07-10-2003 à 23:58:49
MagicBuzz a écrit :
|
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
Marsh 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
Marsh 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 :
|
'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
Marsh 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')
Marsh 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
Marsh Posté le 03-10-2003 à 16:27:06
Une Table
Désignation | Date
-----------------------------
Dés 1 | 01/10/1990
Dés 2 | 02/02/1982
Dés 3 | 03/08/1999
Dés 4 | 15/12/1985
Dés 5 | 16/07/1992
Dés 6 | 17/05/1963
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