Je veux sélectionner les 5 derniers enregistrements d'une table dans SQL Server sans disposer la table dans l'ordre croissant ou décroissant.Comment sélectionner les 5 dernières lignes d'un tableau sans trier?
Répondre
Sans commande, c'est impossible. Qu'est-ce qui définit le "bas"? Les éléments suivants sélectionnent 5 lignes en fonction de leur stockage dans la base de données.
SELECT TOP 5 * FROM [TableName]
A droite, vous pouvez également ajouter une "commande par colx desc" en bas 5 en fonction des index. c'est à dire. les 5 premiers * SONT * les 5 derniers si vous inversez la commande. –
Ce n'est pas correct. Cette requête sélectionne 5 lignes ** mais pas (toujours) ** en fonction de leur stockage dans la base de données. –
Vous pouvez les récupérer de la mémoire.
Donc d'abord, vous obtenez les lignes dans un DataSet, puis récupérez les 5 dernières sur le DataSet.
Ceci est juste au sujet de la requête la plus bizarre que j'ai jamais écrit, mais je suis sûr qu'il obtient les « 5 dernières » lignes d'une table sans commande:
select *
from issues
where issueid not in (
select top (
(select count(*) from issues) - 5
) issueid
from issues
)
Notez que ce utilise La capacité de SQL Server 2005 à transmettre une valeur dans la clause "top" ne fonctionne pas sur SQL Server 2000.
Si, enfin, vous voulez dire dans l'ordre de la clé en clusters, alors je suis foireux ça ne marche pas –
J'ai testé cela sur une table qui n'a pas d'index clusterisé, et il a retourné les cinq dernières lignes que je reçois en faisant un simple "select * from issues". –
Et juste essayé sur une table avec une clé primaire "identity int", et cela a fonctionné là aussi. J'ai les "cinq derniers" rangs. –
Eh bien, les "cinq dernières lignes" sont en fait les cinq dernières lignes en fonction de votre index clusterisé. Votre index clusterisé, par définition, est la façon dont les lignes sont ordonnées. Donc, vous ne pouvez vraiment pas obtenir les "cinq dernières lignes" sans ordre. Vous pouvez cependant obtenir les cinq dernières lignes en ce qui concerne l'index clusterisé.
SELECT TOP 5 * FROM MyTable
ORDER BY MyCLusteredIndexColumn1, MyCLusteredIndexColumnq, ..., MyCLusteredIndexColumnN DESC
Il y a une astuce pratique qui fonctionne dans certaines bases de données pour la commande pour la base de données,
SELECT * DÉCRET TableName PAR vrai
Apparemment, cela peut fonctionner conjointement avec une de l'autre suggestions affichées ici pour laisser les résultats dans l'ordre "ils sont sortis de la base de données", qui dans certaines bases de données, est l'ordre dans lequel ils ont été modifiés.
La façon dont votre question est formulée vous donne l'impression que vous pensez avoir phys utiliser les données de la table pour les récupérer dans l'ordre souhaité. Si tel est le cas, ce n'est pas le cas, la clause ORDER BY existe à cette fin. L'ordre physique dans lequel les enregistrements sont stockés reste inchangé lors de l'utilisation de ORDER BY. Les enregistrements sont triés en mémoire (ou dans l'espace disque temporaire) avant d'être renvoyés.
Notez que l'ordre dans lequel les enregistrements sont renvoyés n'est pas garanti sans l'utilisation d'une clause ORDER BY. Donc, bien que toutes les suggestions ici puissent fonctionner, il n'y a aucune raison de penser qu'elles continueront à fonctionner, et vous ne pouvez pas non plus prouver qu'elles fonctionnent dans tous les cas avec votre base de données actuelle. C'est par conception - je suppose que c'est pour donner au moteur de base de données la liberté de faire comme avec les enregistrements afin d'obtenir les meilleures performances dans le cas où il n'y a pas d'ordre explicite spécifié.
En supposant que vous vouliez les 5 derniers enregistrements triés par le nom du champ dans l'ordre croissant, vous pouvez faire quelque chose comme ça, qui devrait fonctionner dans les deux SQL 2000 ou 2005:
select Name
from (
select top 5 Name
from MyTable
order by Name desc
) a
order by Name asc
Cela devrait être marqué comme la bonne réponse (et le plus compatible). – AshesToAshes
Si vous savez combien de lignes il y aura au total, vous pouvez utiliser la fonction ROW_NUMBER(). Voici un examble de MSDN (http://msdn.microsoft.com/en-us/library/ms186734.aspx)
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
FROM Sales.SalesOrderHeader
)
SELECT *
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
Supposons que vous ayez un index sur id, ce sera rapide comme l'éclair:
SELECT * FROM [MyTable] WHERE [id] > (SELECT MAX([id]) - 5 FROM [MyTable])
Ceci n'est sûr que si vous n'avez supprimé aucun enregistrement. c'est à dire. Si votre ID max = 100, mais vous avez supprimé l'enregistrement 99, vous ne vous retrouverez qu'avec 4 enregistrements, et non 5. – Amber
select *
from table
order by empno(primary key) desc
fetch first 5 rows only
Comme écrit, sélectionne toutes les lignes dans l'ordre décroissant, pas seulement le premier 5. – JYelton
@JYelton - Non, il doesn ' t. Est uniquement valide dans SQL Server 2012 et ignore l'exigence «sans tri». –
- Vous devez compter le nombre de lignes à l'intérieur table (disons que nous avons 12 lignes)
- alors soustraire 5 lignes de leur part (nous sommes maintenant dans 7)
sélectionnez * où index_column> 7
select * from users where user_id > ((select COUNT(*) from users) - 5)
vous pouvez les commander ASC ou DESC
Mais lorsque vous utilisez ce code
select TOP 5 from users order by user_id DESC
il ne sera pas commandé facilement.
Obtenez le comte de cette table
select count(*) from TABLE
select top count * from TABLE where 'primary key row' NOT IN (select top (count-5) 'primary key row' from TABLE)
select * from table limit 5 offset (select count(*) from table) - 5;
5 derniers rangs extraient dans une base MySQL
Cette requête fonctionne parfaitement
SELECT * FROM (SELECT * FROM recharge ORDER BY sno DESC LIMIT 5)sub ORDER BY sno ASC
ou
select sno from(select sno from recharge order by sno desc limit 5) as t where t.sno order by t.sno asc
Dans SQL Server 2012, vous pouvez le faire:
Declare @Count1 int ;
Select @Count1 = Count(*)
FROM [Log] AS L
SELECT
*
FROM [Log] AS L
ORDER BY L.id
OFFSET @Count - 5 ROWS
FETCH NEXT 5 ROWS ONLY;
Lorsque le nombre de lignes dans le tableau est inférieur à 5 les réponses de Matt Hamilton et msuvajac est incorrect. Parce qu'une valeur TOP N rowcount peut ne pas être négative. Un excellent exemple peut être trouvé Here.
je suis en utilisant ce code:
select * from tweets where placeID = '$placeID' and id > (
(select count(*) from tweets where placeID = '$placeID')-2)
Recherche 5 enregistrements de derniers enregistrements que vous pouvez utiliser,
SELECT *
FROM Table Name
WHERE ID <= IDENT_CURRENT('Table Name')
AND ID >= IDENT_CURRENT('Table Name') - 5
DECLARE @MYVAR NVARCHAR(100)
DECLARE @step int
SET @step = 0;
DECLARE MYTESTCURSOR CURSOR
DYNAMIC
FOR
SELECT col FROM [dbo].[table]
OPEN MYTESTCURSOR
FETCH LAST FROM MYTESTCURSOR INTO @MYVAR
print @MYVAR;
WHILE @step < 10
BEGIN
FETCH PRIOR FROM MYTESTCURSOR INTO @MYVAR
print @MYVAR;
SET @step = @step + 1;
END
CLOSE MYTESTCURSOR
DEALLOCATE MYTESTCURSOR
Essayez ceci, si vous ne disposez pas d'une clé primaire ou la même colonne:
select [Stu_Id],[Student_Name] ,[City] ,[Registered],
RowNum = row_number() OVER (ORDER BY (SELECT 0))
from student
ORDER BY RowNum desc
- 1. Comment sélectionner les 10 premières lignes d'une table sans trier?
- 2. Comment sélectionner les 24 dernières heures de lignes à partir d'un décalage de ligne
- 3. Cron travail: garder les 20 dernières lignes
- 4. MySQL: Comment obtenir n dernières lignes d'un type distinct
- 5. Comment sélectionner des cellules de tableau sans sélectionner de cellules de tableau imbriquées dans jQuery
- 6. XPath: Comment sélectionner les nœuds sans attributs?
- 7. Comment trier un tableau de chaînes?
- 8. Comment puis-je joindre les dernières entrées X dans un tableau de chaînes?
- 9. comment trier par ordre croissant xsl croissant avec les 0s dernières
- 10. Trier un tableau multidimensionnel
- 11. Unix shell: comment obtenir les dernières lignes d'un fichier sauf les 20 premiers?
- 12. Comment puis-je sélectionner plusieurs lignes et les cascader?
- 13. Comment trier un tableau de FileInfo []
- 14. Comment trier un tableau dans Scala?
- 15. SQL sélectionner des lignes distinctes
- 16. Pourquoi ne pas sélectionner Top 5 De news_table par news_date?
- 17. Comment sélectionner des lignes de table dans ASP.NET MVC
- 18. Comment puis-je obtenir les dix dernières lignes dans une table de base de données Mysql?
- 19. Comment puis-je additionner les 15 dernières lignes de ma table de base de données?
- 20. Installer PHP 5 sans libxml2
- 21. Dans vim, comment puis-je supprimer toutes les lignes d'un fichier à l'exception des 100 dernières lignes?
- 22. Comment sélectionner des lignes distinctes dans un datatable et le stocker dans un tableau
- 23. lignes correspondantes sans filtrage (SQL)
- 24. Comment sélectionner les lignes d'une table qui ne correspondent pas à une autre table dans SQL?
- 25. Lignes de tableau HTML
- 26. Comment trier une liste liée en SQL?
- 27. Comment trier les enregistrements par page
- 28. Sélectionner par programme toutes les lignes d'un jqGrid?
- 29. Instruction SQL pour sélectionner toutes les lignes du jour précédent
- 30. obtenir seulement 5 éléments de tableau
@Ganesh - vous devriez vous exprimer r question comme une vraie question, pas comme une déclaration "j'ai besoin d'aide". – paxdiablo