8
votes

Comment puis-je utiliser max et limiter ensemble dans MySQL

J'ai une table avec la structure suivante:

id | Couleur

1 |
rouge 2 | Bleu
3 |
jaune 8 | Violet
10 | Green
.
.
.
100 | jaune

J'aimerais pouvoir saisir la valeur ID max pour les 5 premières lignes.

Par exemple, je voudrais faire quelque chose comme ça: Sélectionnez Max (ID) à partir de la limite de table 5

En espérant que cela retournerait la valeur 10

Mais, MySQL continue de retourner 100 ... c'est comme MySQL ne voit même pas la clause limite.


0 commentaires

4 Réponses :


1
votes

Utilisez un sous-sélection:

SELECT MAX(id) FROM (SELECT id FROM table LIMIT 5);


1 commentaires

Non valide SQL. Vous avez besoin d'un alias sur chaque table dérivée + vous devez avoir une commande - vous obtenez donc des résultats «définis».



23
votes

On dirait que vous souhaitez sélectionner les 5 enregistrements TOP (commandé par ID), puis obtenir la valeur la plus élevée de ce groupe? Si oui:

SELECT
    MAX(ID)
FROM
    ( 
         SELECT ID 
         FROM YourTable
         ORDER BY ID
         LIMIT 5
    ) as T1 


3 commentaires

Vous n'avez probablement pas besoin de "choisir *"; Seul "Select ID" devrait être suffisant? (Je ne suis pas sûr que ce ne soit pas, mais peut-être choisir uniquement le (s) champ (s) que vous avez besoin pourrait diminuer la mémoire d'amout requise - ce qui est toujours agréable)


Oui, cela devrait être SELECT ID


Mais cela crée une nouvelle table, lorsque nous avons juste besoin du max. Je suis en train de dire que ceci est aussi lent que la sélection des lignes triées avec limite et calculer le maximum extérieur SQL.



11
votes

Il y a une meilleure façon de le faire que le sous-sélection: xxx

Obtenez une ligne mais saute 4 d'abord .. Ajouter 'ordre par ID' s'il s'agit de la table myisam.


2 commentaires

Cela fonctionne si vous savez combien de rangées il y a. Si vous dépassez le nombre de lignes, la requête renvoie NULL. J'avais besoin de cela à des fins de lot, mais la version maximale est plus appropriée dans mon cas.


Joli! mais ne fonctionnera pas au cas où il y a 4 au lieu de 5 enregistrements



-1
votes

Si vous avez une table avec la structure suivante xxx

la valeur ID max pour les 5 premières valeurs (auto_incrènement?) est 5. BTW, la valeur ID max pour les 6 premières valeurs est de 6. et 100 pour toutes les valeurs. Meilleures salutations.


0 commentaires