¿Cuál es la forma más eficiente de leer la última fila con SQL Server?
La tabla está indexada en una clave única: los valores clave "inferiores" representan la última fila.
Respuestas:
Si está utilizando MS SQL, puede probar:
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
y debería generar los últimos 1000 registros.
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
mykey
es su índice de mesa
mykey
es un identificador único, este enfoque no ayudaría
Necesitará algún tipo de columna de identificación única en su tabla, como una clave principal de llenado automático o una columna de fecha y hora (preferiblemente la clave principal). Entonces puedes hacer esto:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
El ORDER BY column
le dice que reacomode los resultados de acuerdo con los datos de esa columna, y DESC
le dice que invierta los resultados (poniendo así el último primero). Después de eso, LIMIT 1
le dice que solo pase una fila hacia atrás.
Si algunos de sus ID están en orden, supongo que habrá algún orden en su base de datos
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
Creo que la siguiente consulta funcionará para SQL Server con el máximo rendimiento sin ninguna columna ordenable
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
Espero que lo hayas entendido ... :)
Intenté usar last in sql query en SQl server 2008 pero me da este error: "'last' no es un nombre de función integrado reconocido".
Así que terminé usando:
select max(WorkflowStateStatusId) from WorkflowStateStatus
para obtener el Id de la última fila. También se podría usar
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)
Puede utilizar last_value: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
Lo pruebo en una de mis bases de datos y funcionó como se esperaba.
También puede consultar la documentación aquí: https://msdn.microsoft.com/en-us/library/hh231517.aspx
Prueba esto
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
LIMIT
. Esto regresaIncorrect syntax near LIMIT
Para recuperar la última fila de una tabla para la base de datos MS SQL 2005, puede utilizar la siguiente consulta:
select top 1 column_name from table_name order by column_name desc;
Nota: Para obtener la primera fila de la tabla para la base de datos MS SQL 2005, puede utilizar la siguiente consulta:
select top 1 column_name from table_name;
select top 1
sin una orden por no es una forma confiable de obtener el primer registro. Si no hace un pedido por, da permiso para que SQL le proporcione cualquier registro que le plazca.
OFFSET
y FETCH NEXT
son una característica de SQL Server 2012 para lograr la paginación SQL mientras se muestran los resultados.
El OFFSET
argumento se usa para decidir la fila inicial para devolver filas a partir de un resultado y el FETCH
argumento se usa para devolver un número de filas.
SELECT *
FROM table_name
ORDER BY unique_column desc
OFFSET 0 Row
FETCH NEXT 1 ROW ONLY
Así es como obtiene el último registro y actualiza un campo en Access DB.
ACTUALIZAR compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
Si no tiene ninguna columna ordenada, puede usar la identificación física de cada línea:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
Si tiene una tabla replicada, puede tener Identity = 1000 en localDatabase e Identity = 2000 en clientDatabase, por lo que si detecta la última ID, puede encontrar siempre la última del cliente, no la última de la base de datos conectada actual. Entonces, el mejor método que devuelve la última base de datos conectada es:
SELECT IDENT_CURRENT('tablename')
Bueno, no obtengo el "último valor" en una tabla, obtengo el último valor por instrumento financiero. No es lo mismo, pero supongo que es relevante para algunos que buscan averiguar "cómo se hace ahora". También usé RowNumber () y CTE's y antes de eso simplemente tomar 1 y ordenar por [columna] desc. Sin embargo, ya no necesitamos ...
Estoy usando SQL Server 2017, estamos registrando todos los ticks en todos los intercambios a nivel mundial, tenemos ~ 12 mil millones de ticks por día, almacenamos cada Bid, ask y trade, incluidos los volúmenes y los atributos de un tick (bid, ask, trade ) de cualquiera de los intercambios dados.
Tenemos 253 tipos de datos de ticks para cualquier contrato dado (principalmente estadísticas) en esa tabla, el último precio negociado es el tipo de tick = 4, por lo que, cuando necesitamos obtener el "último" de Price, usamos:
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
Puede ver el plan de ejecución en mi sistema de desarrollo, se ejecuta de manera bastante eficiente, se ejecuta en 4 segundos mientras el ETL de importación de intercambio está bombeando datos a la tabla, habrá algunos bloqueos que me ralentizarán ... así es como funcionan los sistemas en vivo.
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)