|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre chevronné
![]() Administrateur systèmes et réseaux - Développeur VB Inscription : juin 2003 Messages : 607 ![]() |
Bonjour, alors je résume, c'est pour du suivi de conso de véhicules qui sont soit loués, soit achetés.
J'ai donc une 1ère table qui a son index, une clef étrangère (int), date de début et date de fin (en varchar(10)) , et le type de propriété (tinyint). Les dates sont toutes au format YYYYMMDD, et il y a les deux pour de la location, et seulement la date du début pour un achat. Sachant qu'un même véhicule peut avoir été loué, puis acheté. Dans une autre table j'ai (entre autres) son index, clef étrangère (int), immatriculation (varchar(30)), n° de dossier (varchar(12)), volume de carburant consommé (int) et la date de conso (varchar(10)) Et je veux avoir pour une période donnée, le volume total de carburant des véhicules du dossier, mais dans l'état de la date la plus récente. Voici ma requête actuelle : Code :
volimmat immat typeprop datdeb datfin 2721 2242XB 1 20090706 2721 2242XB 3 20040305 20090705 2607 2244Xx 1 20090702 2607 2244Xx 3 20040401 20090701 Alors, les véhicules sont les bons, mais je voudrais avoir seulement l'état le plus récent, donc ce cas-là, la 1ère et la 3ème ligne. Comment puis-je faire ça?? ça fait un moment de je cherche, mais je ne suis pas très expérimenté en SQL... Merci d'avance!!!
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius - Si vous avez quelques minutes, passez donc voir mon site
|
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Vous pouvez faire comme ceci : Code SQL :
|
||
|
|
00
|
|
|
#3 |
|
Membre chevronné
![]() Administrateur systèmes et réseaux - Développeur VB Inscription : juin 2003 Messages : 607 ![]() |
Ouch! je n'ai pas l'habitude de ce style de requête...
Je viens d'essayer, ben ça ne fonctionne pas vraiment car ça me sort bien mes 2 véhicules avec la date la plus récente mais aussi 36 autres véhicules du client qui n'ont rien à faire là! A priori, je pense que les 36 autres sont là car leur date de fin de location est supérieure à 20091231
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius - Si vous avez quelques minutes, passez donc voir mon site
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
remplacez OUTER APPLY par CROSS APPLY
|
|
|
00
|
|
|
#5 |
|
Membre chevronné
![]() Administrateur systèmes et réseaux - Développeur VB Inscription : juin 2003 Messages : 607 ![]() |
Ah oui! Là cela fonctionne beaucoup mieux!!!
Merci! Et puis-je savoir la différence entre OUTER APPLY et CROSS APPLY svp??
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius - Si vous avez quelques minutes, passez donc voir mon site
|
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
CROSS APPLY ne renvoi que les lignes de la table de gauche pour lesquels la table de droite (ici la sous requete du APPLY) renvoi au moins une ligne.
OUTER APPLY, renvoi toutes les lignes, avec les colonnes de la table de droite a NULL lorsque la sous requête ne renvoi aucune ligne |
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() Administrateur systèmes et réseaux - Développeur VB Inscription : juin 2003 Messages : 607 ![]() |
OK je le note, effectivement, j'avais vu la présence de tous ces NULL, merci encore en tout cas, car ce n'est pas facile quand on est habitué à de "petites" requêtes...
__________________
L'homme sage apprend de ses erreurs, l'homme plus sage apprend des erreurs des autres. - Confucius - Si vous avez quelques minutes, passez donc voir mon site
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com