SQL Server ile son satırı okumanın en verimli yolu nedir?
Tablo, benzersiz bir anahtarda dizine eklenir - "en alttaki" anahtar değerleri son satırı temsil eder.
Yanıtlar:
MS SQL kullanıyorsanız şunları deneyebilirsiniz:
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESC
Son 1000 kaydı çalıştırırsınız ve çıkarmanız gerekir.
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
mykey
masa dizininiz
mykey
bu yaklaşımın tanımlayıcı benzersizdir olmaz yardım
Tablonuzda otomatik doldurulan birincil anahtar veya tarih saat sütunu (tercihen birincil anahtar) gibi benzersiz bir şekilde tanımlayıcı bir sütuna ihtiyacınız olacaktır. O zaman bunu yapabilirsiniz:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
ORDER BY column
Bu sütun verilere göre sonuçlar rearange için bildirir ve DESC
(böylece ilk olarak son bir koyarak) sonucu ters söyler. Bundan sonra, LIMIT 1
sadece bir satır geri geçmesini söyler.
Kimliğinizin bir kısmı sıralıysa, db'nizde bir düzen olacağını varsayıyorum
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
Aşağıdaki sorgunun SQL Server için herhangi bir sıralanabilir sütun olmadan maksimum performansla çalışacağını düşünüyorum.
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
Umarım anlamışsındır ... :)
SQl server 2008'de sondaki sql sorgusunu kullanmayı denedim ama şu hatayı veriyor: "'last' tanınan bir yerleşik işlev adı değil."
Bu yüzden şunu kullanmayı bıraktım:
select max(WorkflowStateStatusId) from WorkflowStateStatus
son satırın kimliğini almak için. Bir de kullanılabilir
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)
Last_value kullanabilirsiniz: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
Veritabanlarımdan birinde test ettim ve beklendiği gibi çalıştı.
Belgeleri de buradan kontrol edebilirsiniz: https://msdn.microsoft.com/en-us/library/hh231517.aspx
Bunu dene
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
LIMIT
. Bu geri dönüşlerIncorrect syntax near LIMIT
MS SQL veritabanı 2005 için bir tablonun son satırını almak için aşağıdaki sorguyu kullanabilirsiniz:
select top 1 column_name from table_name order by column_name desc;
Not: MS SQL veritabanı 2005 için tablonun ilk satırını almak için aşağıdaki sorguyu kullanabilirsiniz:
select top 1 column_name from table_name;
select top 1
tarafından sipariş vermeden ilk kaydı almanın güvenilir bir yolu değildir. Tarafından sipariş vermezseniz, SQL'in size istediği herhangi bir kaydı vermesine izin verirsiniz.
OFFSET
ve FETCH NEXT
sonuçları görüntülerken SQL sayfalama elde etmek için SQL Server 2012'nin bir özelliğidir.
Bağımsız OFFSET
değişken, başlangıç satırının bir sonuçtan satır döndürmesine karar vermek için kullanılır ve FETCH
bağımsız değişken, bir dizi satır döndürmek için kullanılır.
SELECT *
FROM table_name
ORDER BY unique_column desc
OFFSET 0 Row
FETCH NEXT 1 ROW ONLY
SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)
Bu, son kaydı alma ve Access DB'deki bir alanı güncelleme yöntemidir.
GÜNCELLEME compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
Sıralı bir sütununuz yoksa, her satırın fiziksel kimliğini kullanabilirsiniz:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
Çoğaltılmış bir tablonuz varsa, localDatabase'de bir Identity = 1000 ve clientDatabase'de Identity = 2000 olabilir; bu nedenle, son kimliği yakalarsanız her zaman istemciden son kimliği bulabilirsiniz, mevcut bağlı veritabanından sonuncuyu değil. Dolayısıyla, en son bağlanılan veritabanını döndüren en iyi yöntem şudur:
SELECT IDENT_CURRENT('tablename')
Bir tablodaki "son değeri" alamıyorum, finansal araç başına Son değeri alıyorum. Aynı şey değil ama sanırım "şimdi nasıl yapıldığını" araştırmak isteyenler için önemli. Ayrıca RowNumber () ve CTE'leri kullandım ve ondan önce basitçe 1'i alıp [sütun] desc ile sırala. ancak artık ihtiyacımız yok ...
SQL server 2017 kullanıyorum, küresel olarak tüm borsalardaki tüm tıklamaları kaydediyoruz, günde ~ 12 milyar işaretimiz var, her bir Teklifi saklıyoruz, soruyor ve işlem hacimleri ve onay özellikleri dahil olmak üzere ticaret yapıyoruz (teklif, sor, ticaret ) verilen borsalardan herhangi biri.
Bu tablodaki herhangi bir sözleşme (çoğunlukla istatistik) için 253 tip tik verisine sahibiz, son işlem gören fiyat tik tipi = 4'tür, bu nedenle, kullandığımız Fiyatın "sonunu" almamız gerektiğinde:
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
Dev sistemimde oldukça verimli bir şekilde yürüttüğü uygulama planını görebilirsiniz, döviz ithal ETL'si tabloya veri pompalarken 4 saniyede yürütülür, beni yavaşlatan bir miktar kilitlenme olacaktır ... işte canlı sistemler böyle çalışır.
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)