6 votes

Existe-t-il quelque chose comme SELECT LAST dans une requête sql ?

J'utilise la base de données Sybase pour interroger le rapport de transaction quotidien. J'avais une sous-requête dans mon script.

C'est ici que ça se passe :

SELECT orders.accountid ,items.x,etc
(SELECT charges.mistotal FROM charges where items.id = charges.id)
FROM items,orders
WHERE date = '2008-10-02'

Ici, je reçois le message d'erreur suivant :

Une sous-requête ne peut pas retourner plus d'une valeur

Mes valeurs sont 7.50, 25.00

Je veux retourner les 25.00, mais quand j'utilise

(SELECT TOP 1 charges.mistotal FROM charges where items.id = charges.id)

Mon résultat est 7.50 mais je veux retourner 25.00

Quelqu'un a-t-il une meilleure suggestion ?

11voto

senfo Points 8611
SELECT TOP 1 * 
FROM dbo.YourTable 
ORDER BY Col DESC

Dans votre cas, je suppose que ce serait

SELECT TOP 1 charges.mistotal 
FROM charges where items.id = charges.id 
ORDER BY charges.mistotal DESC

2voto

Christothes Points 4057

Selon quels critères avez-vous choisi de sélectionner le 25.00 au lieu du 7.5 ?

Si cela concerne la valeur maximale, vous pouvez essayer d'utiliser la fonction MAX() sur ce champ.

Si c'est lié à la dernière ligne ajoutée chronologiquement, essayez d'utiliser la fonction MAX() sur le champ datetime, si vous avez des détails sur les heures et les minutes où il a été ajouté.

1voto

Adam Pierce Points 12801

Vous pouvez essayer ceci :

SELECT MAX(charges.mistotal) FROM charges WHERE items.id = charges.id

1voto

Jonathan Leffler Points 299946

Alors, pouvez-vous utiliser l'ordre inverse :

(SELECT TOP 1 charges.mistotal
    FROM charges
    WHERE items.id = charges.id
    ORDER BY charges.mistotal DESC
)

En fait, puisque vous n'avez pas donné d'ordre explicite, la séquence des résultats renvoyés est indéfinie, et vous avez juste de la chance qu'elle vous ait donné la réponse que vous ne vouliez pas ; elle aurait pu vous donner la réponse que vous vouliez, et alors vous n'auriez peut-être pas remarqué qu'elle n'était pas toujours correcte jusqu'à ce qu'elle soit mise en production.

Ou, pouvez-vous utiliser :

(SELECT MAX(charges.mistotal)
    FROM charges
    WHERE charges.id = items.id
)

Ou vous voulez vraiment une SOMME ?

1voto

Zote Points 3385

Pour obtenir le premier, vous utilisez select top 1 | first * from table ordre ascendant pour être le dernier, il suffit d'inverser votre ordre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X