Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
2029 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL server] Problème de requête [--RESOLVED--]

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL server] Problème de requête [--RESOLVED--]

n°530434
h4x0kz3r
Posté le 03-10-2003 à 16:27:06  profilanswer
 

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.  :pt1cable:  
 
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  :heink:  
 
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. :cry:  
 
Une idée, une piste, un conseil, sont les bienvenu.
 :jap:  :jap:


Message édité par h4x0kz3r le 08-10-2003 à 11:59:26
mood
Publicité
Posté le 03-10-2003 à 16:27:06  profilanswer
 

n°530561
mrbebert
Posté le 03-10-2003 à 19:54:25  profilanswer
 

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)

n°530973
h4x0kz3r
Posté le 04-10-2003 à 02:36:36  profilanswer
 

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.

n°531027
HappyHarry
Posté le 04-10-2003 à 10:12:10  profilanswer
 

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
n°532700
lofo
Posté le 06-10-2003 à 18:01:18  profilanswer
 

voila un liens vers un site ou sont expliquer pas mal de choses de manières assez simple... si sa peut t'aider !
  [:lofo]  
 
 
http://sqlpro.developpez.com/indexSQL.html

n°533601
h4x0kz3r
Posté le 07-10-2003 à 21:39:17  profilanswer
 

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!

n°533738
HappyHarry
Posté le 07-10-2003 à 22:53:17  profilanswer
 

h4x0kz3r a écrit :

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!
 


 
ca doit pas t'empecher de spécifier la table sur laquelle doit etre faite la requete imbriquée :sarcastic:


Message édité par HappyHarry le 07-10-2003 à 22:53:27
n°533901
MagicBuzz
Posté le 07-10-2003 à 23:54:58  profilanswer
 

clause HAVING

n°533907
MagicBuzz
Posté le 07-10-2003 à 23:57:12  profilanswer
 

select designation
from table
having date = min(date)


 
Ou plus simple (mais moins propre)
 

select top 1 designation
from table
order by date asc

n°533913
HappyHarry
Posté le 07-10-2003 à 23:58:49  profilanswer
 

MagicBuzz a écrit :


 
Ou plus simple (mais moins propre)
 

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 :o

mood
Publicité
Posté le 07-10-2003 à 23:58:49  profilanswer
 

n°533928
MagicBuzz
Posté le 08-10-2003 à 00:02:20  profilanswer
 

bah nan, le desc va prendre la plus récente non :heink:
 
sinon, pas compris la seconde phrase :D
 
PS: de toute façon, le having est plus propre et plus académique

n°534235
h4x0kz3r
Posté le 08-10-2003 à 11:58:28  profilanswer
 

Citation :

ca doit pas t'empecher de spécifier la table sur laquelle doit etre faite la requete imbriquée :sarcastic:


 
wooops  :whistle:  
 
Pour le  
 

Code :
  1. select designation
  2. from table
  3. 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 :jap:  :jap:  

n°2040741
Nco95
Posté le 08-12-2010 à 12:09:45  profilanswer
 

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
n°2040809
jielbi
Posté le 08-12-2010 à 15:27:35  profilanswer
 

C'est moi ou y'a un déterrage de topic de la mort qui tue  :D  
Depuis tout ce temps je lui souhaite quand même d'avoir trouvé sa réponse  :o


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL server] Problème de requête [--RESOLVED--]

 

Sujets relatifs
Nombre de caractères dans une requète et drivers JDBC[mysql] pb de conception d'une requête
[perl] sbrk échoue, problème de consommation mémoire excessiveProblème de date en php
[thread/linux/c++/kdevelop3.1] Problème avec les threadsRésultats d'une requête dans un tableaux
Problème "Insert" pour débutant[PHP / SQL] Petite base de donnée - etude de faisablité
simple CSS problemeProblème d'échappement avec l'apostrophe ou '
Plus de sujets relatifs à : [SQL server] Problème de requête [--RESOLVED--]


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR