2010-02-13 12 views
3

Par exemple, étant donné ce tableau de ids rares:Obtenir la valeur précédente valeur maximale

 
|id| 
| 1| 
| 2| 
| 3| 
| 6| 
| 7| 

je peux obtenir le plus haut "id" de ma table en utilisant cette requête:

SELECT max(id) FROM Comics 

Je reçois: Comment puis-je obtenir le "id" qui précède juste le "id" le plus élevé (même si les valeurs ne sont pas continues)?

 
|id| 
| 7| 

+1

ORDER BY id DESC et décrochez le second dans votre programme. BTW, quelle est votre base de données? – ziya

Répondre

1
SELECT max(id) FROM Comics 

est le même que

SELECT TOP 1 id FROM Comics ORDER BY ID DESC 

Note: Ceci est transact syntaxe SQL, utilisez rownum ou limite en fonction de votre fournisseur

pour obtenir la ligne 2 vous pouvez faire

SELECT TOP 1 ID 
FROM 
    (SELECT TOP 2 id 
    FROM Comics 
    ORDER BY ID DESC) 
ORDER BY ID ASC 
+0

Je ne savais pas que vous pouvez avoir SQL dans SQL comme ça, merci. –

+0

@Joseph cette technique est connue comme une table dérivée ou une vue en ligne. –

+0

Si vous utilisez mysql ou postgre la requête est beaucoup plus simple il suffit d'utiliser la fonctionnalité offest –

2

En termes généraux, vous pouvez d'abord trouver l'ID maximum (que vous avez fait), puis trouver l'ID maximum qui est inférieur à (<) le maximum.

Plus précisément,

select max(id) from Comics where id < 7 

Alternativement, vous pouvez commander les résultats par ordre décroissant:

select id from Comics order by id desc 

puis regarder la secondes ligne retournée.

+0

ou trier dans l'ordre décroissant utiliser 'OFFSET' pour passer à la deuxième rangée et' LIMIT' pour retourner juste le 1. –

0

cela ferait aussi bien ..

SELECT 
    max(id) 
FROM 
    Comics 
WHERE id < (SELECT max(id) FROM Comics) 
Questions connexes