Ce message est destiné a JF, mais s'il y a d'autre Pro du SQL , je suis preneur.
Si vous comprenez rien, c'est normal, passez juste votre chemin
Une double question sur une requete que je ne sais ecrire:
voila la base :
SELECT ROW_NUMBER() OVER(ORDER BY RaceTime ASC) AS Row, ID_Ghost, RaceTime FROM Ghost WHERE Class=? AND MirrorMode=? AND CircuitID=? ORDER BY RaceTime ASC, Date_Enregistrement ASC;
Ce truc fonctionne et retourne:
Citation:
Row=1 | ID_Ghost=22 | RaceTime=35599 |
Row=2 | ID_Ghost=21 | RaceTime=35767 |
Row=3 | ID_Ghost=2 | RaceTime=36666 |
Row=4 | ID_Ghost=4 | RaceTime=37067 |
Row=5 | ID_Ghost=10 | RaceTime=37833 |
Row=6 | ID_Ghost=8 | RaceTime=38100 |
voila mes 2 questions :
-quel Syntaxe utiliser pour que la requete me retourne une seul ligne avec un critere fournit, disons le ID_Ghost=2, mais le Row_Number qui correspond bien à la position de la requete initial ?
donc je veux juste
Citation:
Row=3 | ID_Ghost=2 | RaceTime=36666 |
sans avoir a parcourir par script tout les enregistrements pour trouver le bon. Pour info : j'utilise un objet RecordeSet adoDB pour parcourir les enregistrements.
-2em question :
le WHERE ==> WHERE Class=? AND MirrorMode=? AND CircuitID=?
Les variables sont obtenues via une premiere requete dans cette meme table
Citation:
SELECT Class, MirrorMode, CircuitID, RaceTime FROM Ghost WHERE ID_Ghost=?
Je stock mes variables Class, MirrorMode et CircuitID ... et je fais une 2em requete ( celle de base )
Il y aurai un moyen de faire tout d'un coup un truc du genre
Citation:
SELECT ROW_NUMBER() OVER(ORDER BY RaceTime ASC) AS Row, ID_Ghost, RaceTime FROM Ghost WHERE (Class, MirrorMode, CircuitID) IN (SELECT Class, MirrorMode, CircuitID FROM Ghost WHERE ID_Ghost=?)
Mais visblement sous SQL Express 2012 , ça ne marche pas, et j'ai lu que MSSQL surpportait pas forcément cette instruction ( WHERE (Class, MirrorMode, CircuitID) IN ) , mais l'info date de 2007
C'est moins obligatoire, mais ça serait plus classe, que tout soit fait d'une seule requete.
Alors si vous voyez une solution qui vous semble simple, moi je seche un peu sur ce coup.
Le truc du Row_Number je connaissais pas avant hiers
Si vous avez compris de quoi on parle, et que vous avez une solution, faire vous plaisir.
l'idée c'est qu'a la fin il y ai qu'une seule requete.
la 2em partie peut rester en 2 requetes, l'execution etant extrement rapide.
la 1er partie est plus importante, parcourir le jeu de resultat pour trouver la bonne ligne risque de poser probleme de performance si j'ai 50 000 enregistrements dans la table.