110 votes

Comment lire la dernière ligne avec SQL Server

Quelle est la manière la plus efficace de lire la dernière ligne avec SQL Server ?

La table est indexée sur une clé unique -- les valeurs de la clé "inférieure" représentent la dernière ligne.

205voto

Darksider Points 2692

Si vous utilisez MS SQL, vous pouvez essayer :

SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC

27 votes

Que faire si vous avez 5 millions d'enregistrements dans la BD ! :-\

8 votes

Si la table est indexée sur la colonne de tri, alors SQL lira simplement la dernière ligne de la table. Aucun tri coûteux ou balayage complet de la table n'est nécessaire.

0 votes

Si je dois obtenir les 1000 derniers enregistrements, comment faire, pouvez-vous me le dire ?

23voto

Adam Pierce Points 12801
select whatever,columns,you,want from mytable
 where mykey=(select max(mykey) from mytable);

0 votes

Qu'est-ce que ma clé ? dans mon cas ?

0 votes

@Mowgli mykey est l'index de votre table

2 votes

Si mykey est un identifiant unique, cette approche n'aiderait pas

18voto

willurd Points 2715

Vous aurez besoin d'une sorte de colonne d'identification unique dans votre table, comme une clé primaire à remplissage automatique ou une colonne de date (de préférence la clé primaire). Alors vous pouvez faire ceci :

SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1

Le site ORDER BY column lui indique de réorganiser les résultats en fonction des données de cette colonne, et l'option DESC lui demande d'inverser les résultats (en mettant donc le dernier en premier). Après cela, le LIMIT 1 lui dit de ne retransmettre qu'une seule ligne.

5 votes

Wow, c'est dur, la question originale ne parlait même pas spécifiquement de SQL Server. La solution ci-dessus est parfaitement légitime même si SQL Server utilise des mots différents pour décrire le même concept. +1

0 votes

@VinkoVrsalovic ça ne veut pas dire que la réponse est inutile a contrario, même après une décennie. Êtes-vous d'accord avec moi ?

1 votes

C'est le problème de la communication écrite - il est facile de la lire beaucoup plus durement que ce qui est prévu, surtout quand elle est brève ! Je le sais maintenant et je comprends que la responsabilité incombe à l'auteur. Donc, si je devais écrire ça aujourd'hui, je dirais : "C'est l'idée, bien que vous deviez utiliser TOP au lieu de LIMIT pour SQL Server, car c'est le moteur DMBS marqué dans la question. Voir docs.microsoft.com/fr/us/sql/t-sql/queries/ " @snr

13voto

lionelmessi Points 54

Si certains de vos identifiants sont dans l'ordre, je suppose qu'il y aura un certain ordre dans votre base de données.

SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)

2voto

Afin de récupérer la dernière ligne d'une table pour la base de données MS SQL 2005, vous pouvez utiliser la requête suivante :

select top 1 column_name from table_name order by column_name desc; 

Note : Pour obtenir la première ligne de la table pour la base de données MS SQL 2005, vous pouvez utiliser la requête suivante :

select top 1 column_name from table_name;

2 votes

select top 1 sans ordre par n'est pas un moyen fiable d'obtenir le premier enregistrement. Si vous n'indiquez pas de critère de classement, vous autorisez SQL à vous donner n'importe quel enregistrement.

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