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 clé «du bas» représentent la dernière ligne.
sql
sql-server
rp.
la source
la source
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
et devriez sortir les 1000 derniers enregistrements.select whatever,columns,you,want from mytable where mykey=(select max(mykey) from mytable);
la source
mykey
est votre index de tablemykey
c'est un identifiant unique, cette approche n'aiderait pasVous aurez besoin d'une sorte de colonne d'identification unique dans votre table, comme une clé primaire à remplissage automatique ou une colonne datetime (de préférence la clé primaire). Ensuite, vous pouvez faire ceci:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
Le lui
ORDER BY column
dit de réorganiser les résultats en fonction des données de cette colonne, et le luiDESC
dit d'inverser les résultats (mettant ainsi le dernier en premier). Après cela, le luiLIMIT 1
dit de ne repasser qu'une seule ligne.la source
Si certains de vos identifiants sont en 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)
la source
Je pense que la requête ci-dessous fonctionnera pour SQL Server avec des performances maximales sans aucune colonne triable
SELECT * FROM table WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1 FROM table) ID FROM table)
J'espère que vous l'avez compris ... :)
la source
J'ai essayé d'utiliser la dernière requête SQL dans le serveur SQl 2008 mais cela donne cette erreur: "'last' n'est pas un nom de fonction intégré reconnu."
J'ai donc fini par utiliser:
select max(WorkflowStateStatusId) from WorkflowStateStatus
pour obtenir l'ID de la dernière ligne. On pourrait également utiliser
Declare @i int set @i=1 select WorkflowStateStatusId from Workflow.WorkflowStateStatus where WorkflowStateStatusId not in (select top ( (select count(*) from Workflow.WorkflowStateStatus) - @i ) WorkflowStateStatusId from .WorkflowStateStatus)
la source
Vous pouvez utiliser last_value:
SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
Je le teste sur l'une de mes bases de données et cela a fonctionné comme prévu.
Vous pouvez également consulter la documentation ici: https://msdn.microsoft.com/en-us/library/hh231517.aspx
la source
Essaye ça
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
la source
LIMIT
. ThisIncorrect syntax near LIMIT
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;
Remarque: 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;
la source
select top 1
sans commande par n'est pas un moyen fiable d'obtenir le premier enregistrement. Si vous ne mettez pas dans un ordre par, vous autorisez SQL à vous donner tout enregistrement qui lui plaît.OFFSET
etFETCH NEXT
sont une fonctionnalité de SQL Server 2012 pour réaliser la pagination SQL tout en affichant les résultats.L'
OFFSET
argument est utilisé pour décider de la ligne de départ pour renvoyer les lignes d'un résultat et l'FETCH
argument est utilisé pour renvoyer un ensemble de nombre de lignes.SELECT * FROM table_name ORDER BY unique_column desc OFFSET 0 Row FETCH NEXT 1 ROW ONLY
la source
SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)
la source
C'est ainsi que vous obtenez le dernier enregistrement et mettez à jour un champ dans Access DB.
MISE À JOUR
compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
la source
Si vous n'avez aucune colonne ordonnée, vous pouvez utiliser l'ID physique de chaque ligne:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot], T.* FROM MyTable As T order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
la source
Si vous avez une table répliquée, vous pouvez avoir une identité = 1000 dans localDatabase et une identité = 2000 dans clientDatabase, donc si vous attrapez le dernier ID, vous pouvez toujours trouver le dernier du client, pas le dernier de la base de données connectée actuelle. Donc, la meilleure méthode qui renvoie la dernière base de données connectée est:
SELECT IDENT_CURRENT('tablename')
la source
Eh bien, je n'obtiens pas la «dernière valeur» dans un tableau, j'obtiens la dernière valeur par instrument financier. Ce n'est pas la même chose, mais je suppose que c'est pertinent pour certains qui cherchent à savoir "comment c'est fait maintenant". J'ai également utilisé RowNumber () et CTE et avant cela pour simplement prendre 1 et ordonner par [colonne] desc. mais nous n'avons plus besoin de ...
J'utilise SQL Server 2017, nous enregistrons tous les ticks sur tous les échanges dans le monde, nous avons ~ 12 milliards de ticks par jour, nous stockons chaque Bid, ask et trade, y compris les volumes et les attributs d'un tick (bid, ask, trade ) de l'un des échanges donnés.
Nous avons 253 types de données de ticks pour un contrat donné (principalement des statistiques) dans ce tableau, le dernier prix négocié est le type de tick = 4 donc, lorsque nous devons obtenir le "dernier" prix que nous utilisons:
select distinct T.contractId, LAST_VALUE(t.Price)over(partition by t.ContractId order by created ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) from [dbo].[Tick] as T where T.TickType=4
Vous pouvez voir le plan d'exécution sur mon système de développement, il s'exécute assez efficacement, s'exécute en 4 secondes pendant que l'importation d'échange ETL pompe des données dans la table, il y aura un verrouillage qui me ralentira ... c'est juste comme ça que les systèmes en direct fonctionnent.
la source
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
la source
Je suis presque sûr que c'est:
SELECT last(column_name) FROM table
Parce que j'utilise quelque chose de similaire:
SELECT last(id) FROM Status
la source