Jaki jest najbardziej efektywny sposób odczytania ostatniego wiersza w SQL Server?
Tabela jest indeksowana według unikalnego klucza - „najniższe” wartości klucza reprezentują ostatni wiersz.
sql
sql-server
rp.
źródło
źródło
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
i powinieneś wypisać ostatnie 1000 rekordów.select whatever,columns,you,want from mytable where mykey=(select max(mykey) from mytable);
źródło
mykey
to indeks twojego stołumykey
jest to unikalny identyfikator, to podejście nie pomogłobyBędziesz potrzebował jakiejś unikalnie identyfikującej kolumny w swojej tabeli, takiej jak automatycznie uzupełniający się klucz podstawowy lub kolumna z datą i godziną (najlepiej klucz podstawowy). Następnie możesz to zrobić:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
ORDER BY column
Mówi do rearange wyniki zgodnie z danymi tej kolumny, aDESC
mówi się na odwrotnej wyniki (czyli umieszczenie ostatni pierwsze). NastępnieLIMIT 1
każe mu przejść tylko jeden wiersz.źródło
Jeśli niektóre z twoich identyfikatorów są w porządku, zakładam, że w twojej bazie danych będzie jakiś porządek
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
źródło
Myślę, że poniższe zapytanie będzie działać dla SQL Server z maksymalną wydajnością bez żadnej sortowalnej kolumny
SELECT * FROM table WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1 FROM table) ID FROM table)
Mam nadzieję, że to zrozumiałeś ... :)
źródło
Próbowałem użyć last w kwerendzie sql na serwerze SQl 2008, ale daje to następujący błąd: „'last' nie jest rozpoznawalną nazwą funkcji wbudowanej”.
Więc ostatecznie użyłem:
select max(WorkflowStateStatusId) from WorkflowStateStatus
aby uzyskać identyfikator ostatniego rzędu. Przydałoby się też
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)
źródło
Możesz użyć last_value:
SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
Testuję go w jednej z moich baz danych i działa zgodnie z oczekiwaniami.
Możesz również sprawdzić dokumentację tutaj: https://msdn.microsoft.com/en-us/library/hh231517.aspx
źródło
Spróbuj tego
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
źródło
LIMIT
. To powracaIncorrect syntax near LIMIT
Aby pobrać ostatni wiersz tabeli dla bazy danych MS SQL 2005, możesz użyć następującego zapytania:
select top 1 column_name from table_name order by column_name desc;
Uwaga: Aby uzyskać pierwszy wiersz tabeli dla bazy danych MS SQL 2005, możesz użyć następującego zapytania:
select top 1 column_name from table_name;
źródło
select top 1
bez zamówienia przez nie jest niezawodnym sposobem na zdobycie pierwszego rekordu. Jeśli nie złożysz zamówienia do dnia, zezwalasz SQL na przekazanie Ci dowolnego rekordu, który mu się podoba.OFFSET
iFETCH NEXT
są funkcją SQL Server 2012 umożliwiającą stronicowanie SQL podczas wyświetlania wyników.OFFSET
Argument ten jest wykorzystywany do określenia, wiersz wyjściowe do rzędów obie z wyników iFETCH
argumentem służy do powrotu zestaw wielu rzędach.SELECT * FROM table_name ORDER BY unique_column desc OFFSET 0 Row FETCH NEXT 1 ROW ONLY
źródło
SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)
źródło
W ten sposób uzyskujesz ostatni rekord i aktualizujesz pole w bazie danych Access.
AKTUALIZACJA
compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
źródło
Jeśli nie masz żadnej uporządkowanej kolumny, możesz użyć fizycznego identyfikatora każdego wiersza:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot], T.* FROM MyTable As T order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
źródło
Jeśli masz zreplikowaną tabelę, możesz mieć Identity = 1000 w localDatabase i Identity = 2000 w clientDatabase, więc jeśli złapiesz ostatni identyfikator, zawsze możesz znaleźć ostatni z klienta, a nie ostatni z aktualnie podłączonej bazy danych. Dlatego najlepszą metodą zwracania ostatnio podłączonej bazy danych jest:
SELECT IDENT_CURRENT('tablename')
źródło
Cóż, nie otrzymuję „ostatniej wartości” w tabeli, otrzymuję ostatnią wartość na instrument finansowy. To nie to samo, ale wydaje mi się, że jest to istotne dla niektórych, którzy chcą sprawdzić, „jak to się teraz robi”. Użyłem również RowNumber () i CTE, a wcześniej po prostu wziąć 1 i uporządkować według [kolumna] desc. jednak nie musimy już ...
Używam SQL Server 2017, rejestrujemy wszystkie ticky na wszystkich giełdach na całym świecie, mamy ~ 12 miliardów ticków dziennie, przechowujemy każdą ofertę kupna, zapytaj i handel, w tym wolumeny i atrybuty ticka (kup, kup, handel ) dowolnej z podanych giełd.
Mamy 253 typy ticków dla dowolnego kontraktu (głównie statystyki) w tej tabeli, ostatnia notowana cena to typ tick = 4, więc kiedy musimy uzyskać "ostatnią" cenę używamy:
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
Możesz zobaczyć plan wykonania w moim systemie deweloperskim, który wykonuje dość wydajnie, wykonuje się w 4 sekundy, podczas gdy import ETL z wymiany pompuje dane do tabeli, będzie trochę blokad, które spowalniają mnie ... tak właśnie działają systemy na żywo.
źródło
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
źródło
Jestem prawie pewien, że tak:
SELECT last(column_name) FROM table
Ponieważ używam czegoś podobnego:
SELECT last(id) FROM Status
źródło