Qual é a maneira mais eficiente de ler a última linha com o SQL Server?
A tabela é indexada em uma chave única - os valores da chave "inferior" representam a última linha.
sql
sql-server
rp.
fonte
fonte
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
deve executar e deve produzir os últimos 1000 registros.select whatever,columns,you,want from mytable where mykey=(select max(mykey) from mytable);
fonte
mykey
é o índice da sua tabelamykey
for um identificador exclusivo, essa abordagem não ajudariaVocê precisará de algum tipo de coluna de identificação exclusiva em sua tabela, como uma chave primária de autopreenchimento ou uma coluna de data e hora (de preferência a chave primária). Então você pode fazer isso:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
O
ORDER BY column
instrui a reorganizar os resultados de acordo com os dados dessa coluna e oDESC
instrui a reverter os resultados (colocando assim o último primeiro). Depois disso, oLIMIT 1
diz para passar de volta apenas uma linha.fonte
Se alguma de sua identificação estiver em ordem, estou assumindo que haverá alguma ordem em seu banco de dados
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
fonte
Acho que a consulta abaixo funcionará para SQL Server com desempenho máximo, sem qualquer coluna classificável
SELECT * FROM table WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1 FROM table) ID FROM table)
Espero que você tenha entendido ... :)
fonte
Tentei usar last in sql query no SQl Server 2008, mas deu este erro: "'last' não é um nome de função embutido reconhecido."
Então acabei usando:
select max(WorkflowStateStatusId) from WorkflowStateStatus
para obter o Id da última linha. Também se pode 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)
fonte
Você pode usar last_value:
SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
Eu testei em um dos meus bancos de dados e funcionou conforme o esperado.
Você também pode verificar a documentação aqui: https://msdn.microsoft.com/en-us/library/hh231517.aspx
fonte
Tente isto
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
fonte
LIMIT
. Este retornaIncorrect syntax near LIMIT
Para recuperar a última linha de uma tabela para o banco de dados MS SQL 2005, você pode usar a seguinte consulta:
select top 1 column_name from table_name order by column_name desc;
Nota: Para obter a primeira linha da tabela para o banco de dados MS SQL 2005, você pode usar a seguinte consulta:
select top 1 column_name from table_name;
fonte
select top 1
sem um pedido de não é uma maneira confiável de obter o primeiro registro. Se você não fizer um pedido até, dará permissão ao SQL para fornecer qualquer registro que desejar.OFFSET
eFETCH NEXT
são um recurso do SQL Server 2012 para obter paginação SQL enquanto exibe os resultados.O
OFFSET
argumento é usado para decidir a linha inicial para retornar linhas de um resultado e oFETCH
argumento é usado para retornar um conjunto de número de linhas.SELECT * FROM table_name ORDER BY unique_column desc OFFSET 0 Row FETCH NEXT 1 ROW ONLY
fonte
SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)
fonte
É assim que você obtém o último registro e atualiza um campo no Access DB.
ATUALIZAR
compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
fonte
Se você não tiver nenhuma coluna ordenada, pode usar o id físico de cada linha:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot], T.* FROM MyTable As T order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
fonte
Se você tiver uma tabela Replicada, poderá ter Identity = 1000 em localDatabase e Identity = 2000 em clientDatabase, portanto, se você pegar o último ID, poderá encontrar sempre o último do cliente, não o último do banco de dados conectado atual. Portanto, o melhor método que retorna o último banco de dados conectado é:
SELECT IDENT_CURRENT('tablename')
fonte
Bem, eu não estou obtendo o "último valor" em uma tabela, estou obtendo o último valor por instrumento financeiro. Não é a mesma coisa, mas acho que é relevante para alguns que estão procurando saber "como é feito agora". Eu também usei RowNumber () e CTE's e antes disso para simplesmente pegar 1 e ordenar por [coluna] desc. no entanto, não precisamos mais ...
Estou usando o SQL Server 2017, estamos gravando todos os ticks em todas as bolsas globalmente, temos aproximadamente 12 bilhões de ticks por dia, armazenamos cada Bid, ask e trade, incluindo os volumes e os atributos de um tick (licitar, pedir, negociar ) de qualquer uma das trocas fornecidas.
Temos 253 tipos de dados de ticks para qualquer contrato dado (principalmente estatísticas) nessa tabela, o último preço negociado é o tipo de tick = 4, portanto, quando precisamos obter o "último" do Preço que 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
Você pode ver o plano de execução no meu sistema de desenvolvimento, ele executa de forma bastante eficiente, em 4 segundos enquanto o ETL de importação de câmbio está bombeando dados para a tabela, haverá alguns bloqueios me deixando mais lento ... é assim que os sistemas ao vivo funcionam.
fonte
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
fonte
Tenho certeza de que é:
SELECT last(column_name) FROM table
Porque eu uso algo semelhante:
SELECT last(id) FROM Status
fonte