Qual è il modo più efficiente per leggere l'ultima riga con SQL Server?
La tabella è indicizzata su una chiave univoca: i valori delle chiavi "inferiori" rappresentano l'ultima riga.
Risposte:
Se stai usando MS SQL, puoi provare:
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
e produrre gli ultimi 1000 record.
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
mykey
è l'indice del tuo tavolo
mykey
è un identificatore univoco questo approccio non sarebbe di aiuto
Avrai bisogno di una sorta di colonna di identificazione univoca nella tua tabella, come una chiave primaria a riempimento automatico o una colonna datetime (preferibilmente la chiave primaria). Quindi puoi farlo:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
Gli ORDER BY column
dice di riorganizzare i risultati in base ai dati di quella colonna e gli DESC
dice di invertire i risultati (mettendo così l'ultimo per primo). Dopodiché, gli LIMIT 1
dice di tornare indietro di una sola riga.
Se alcuni dei tuoi ID sono in ordine, presumo che ci sarà un certo ordine nel tuo db
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
Penso che la query seguente funzionerà per SQL Server con le massime prestazioni senza alcuna colonna ordinabile
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
Spero tu l'abbia capito ... :)
Ho provato a utilizzare last in sql query in SQl server 2008 ma dà questo errore: "'last' non è un nome di funzione integrato riconosciuto."
Quindi ho finito per usare:
select max(WorkflowStateStatusId) from WorkflowStateStatus
per ottenere l'ID dell'ultima riga. Si potrebbe anche usare
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)
Puoi usare last_value: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
L'ho testato in uno dei miei database e ha funzionato come previsto.
Puoi anche controllare la documentazione qui: https://msdn.microsoft.com/en-us/library/hh231517.aspx
Prova questo
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
LIMIT
. Questo ritornaIncorrect syntax near LIMIT
Per recuperare l'ultima riga di una tabella per il database MS SQL 2005, è possibile utilizzare la seguente query:
select top 1 column_name from table_name order by column_name desc;
Nota: per ottenere la prima riga della tabella per il database MS SQL 2005, è possibile utilizzare la seguente query:
select top 1 column_name from table_name;
select top 1
senza un ordine di non è un modo affidabile per ottenere il primo record. Se non metti in ordine da, dai il permesso a SQL di darti qualsiasi record desideri.
OFFSET
e FETCH NEXT
sono una funzionalità di SQL Server 2012 per ottenere il paging SQL durante la visualizzazione dei risultati.
L' OFFSET
argomento viene utilizzato per decidere la riga iniziale per restituire righe da un risultato e l' FETCH
argomento viene utilizzato per restituire un insieme di numero di righe.
SELECT *
FROM table_name
ORDER BY unique_column desc
OFFSET 0 Row
FETCH NEXT 1 ROW ONLY
In questo modo si ottiene l'ultimo record e si aggiorna un campo in Access DB.
AGGIORNARE compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
Se non hai una colonna ordinata, puoi utilizzare l'id fisico di ciascuna riga:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
Se hai una tabella replicata, puoi avere Identity = 1000 in localDatabase e Identity = 2000 in clientDatabase, quindi se prendi l'ultimo ID potresti trovare sempre l'ultimo dal client, non l'ultimo dal database connesso corrente. Quindi il metodo migliore che restituisce l'ultimo database connesso è:
SELECT IDENT_CURRENT('tablename')
Beh, non ottengo l '"ultimo valore" in una tabella, ottengo l'ultimo valore per strumento finanziario. Non è lo stesso, ma immagino sia rilevante per alcuni che stanno cercando di cercare "come è fatto ora". Ho anche usato RowNumber () e CTE e prima ancora per prendere semplicemente 1 e ordinare per [colonna] desc. tuttavia non abbiamo più bisogno di ...
Sto usando SQL Server 2017, stiamo registrando tutti i tick su tutte le borse a livello globale, abbiamo ~ 12 miliardi di tick al giorno, memorizziamo ogni offerta, domanda e scambio inclusi i volumi e gli attributi di un segno di spunta (offerta, domanda, scambio ) di uno qualsiasi degli scambi.
Abbiamo 253 tipi di dati sui tick per un dato contratto (principalmente statistiche) in quella tabella, l'ultimo prezzo scambiato è il tipo tick = 4 quindi, quando abbiamo bisogno di ottenere l '"ultimo" del prezzo, usiamo:
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
Puoi vedere il piano di esecuzione sul mio sistema di sviluppo che viene eseguito in modo abbastanza efficiente, viene eseguito in 4 secondi mentre l'ETL di importazione dello scambio sta pompando i dati nella tabella, ci sarà un blocco che mi rallenta ... è così che funzionano i sistemi live.
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)