Каков наиболее эффективный способ чтения последней строки с помощью SQL Server?
Таблица индексируется по уникальному ключу - «нижние» значения ключа представляют последнюю строку.
Ответы:
Если вы используете MS SQL, вы можете попробовать:
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
SELECT TOP 1000 * FROM table_name ORDER BY column_name DESCи вывести последние 1000 записей.
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
mykey- это индекс вашей таблицы
mykeyэто уникальный идентификатор, этот подход не помог бы
Вам понадобится какой-то столбец с уникальной идентификацией в вашей таблице, например, первичный ключ с автозаполнением или столбец datetime (предпочтительно первичный ключ). Тогда вы можете сделать это:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
ORDER BY columnГоворит его rearange результатов в соответствии с данными этого столбца, и DESCсообщает ему , чтобы полностью изменить результаты (положив тем самым последнюю первым). После этого LIMIT 1он сообщает ему, что нужно передать только одну строку.
Если некоторые из ваших идентификаторов в порядке, я предполагаю, что в вашей базе данных будет какой-то порядок
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
Я думаю, что ниже запрос будет работать для SQL Server с максимальной производительностью без какого-либо сортируемого столбца
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
Надеюсь, вы это поняли ... :)
Я пробовал использовать last в sql-запросе на сервере SQl 2008, но он дает такую ошибку: «'last' не является распознанным именем встроенной функции».
В итоге я использовал:
select max(WorkflowStateStatusId) from WorkflowStateStatus
чтобы получить идентификатор последней строки. Можно также использовать
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: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
Я тестировал его в одной из своих баз данных, и он работал, как ожидалось.
Вы также можете проверить документацию здесь: https://msdn.microsoft.com/en-us/library/hh231517.aspx
Попробуй это
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
LIMIT. Это возвращаетсяIncorrect syntax near LIMIT
Чтобы получить последнюю строку таблицы для базы данных MS SQL 2005, вы можете использовать следующий запрос:
select top 1 column_name from table_name order by column_name desc;
Примечание: чтобы получить первую строку таблицы для базы данных MS SQL 2005, вы можете использовать следующий запрос:
select top 1 column_name from table_name;
select top 1без заказа - ненадежный способ получить первую запись. Если вы не разместите заказ до, вы даете разрешение SQL выдать вам любую запись, которую он пожелает.
OFFSETи FETCH NEXTявляются функцией SQL Server 2012 для выполнения разбиения на страницы SQL при отображении результатов.
OFFSETАргумент используются для определения исходных строк для возврата строк из результата и FETCHаргумент используются для возврата набора количества строк.
SELECT *
FROM table_name
ORDER BY unique_column desc
OFFSET 0 Row
FETCH NEXT 1 ROW ONLY
Таким образом вы получаете последнюю запись и обновляете поле в Access DB.
ОБНОВИТЬ compalints SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
Если у вас нет упорядоченного столбца, вы можете использовать физический идентификатор каждой строки:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
Если у вас есть реплицированная таблица, у вас может быть Identity = 1000 в localDatabase и Identity = 2000 в clientDatabase, поэтому, если вы поймаете последний идентификатор, вы всегда сможете найти последний идентификатор из клиента, а не последний из текущей подключенной базы данных. Итак, лучший метод, который возвращает последнюю подключенную базу данных:
SELECT IDENT_CURRENT('tablename')
Ну, я не получаю «последнее значение» в таблице, я получаю последнее значение по финансовому инструменту. Это не то же самое, но я думаю, это актуально для тех, кто хочет узнать, «как это делается сейчас». Я также использовал RowNumber () и CTE, а до этого просто взял 1 и упорядочил по [столбцу] по убыванию. однако нам больше не нужно ...
Я использую SQL Server 2017, мы записываем все тики на всех биржах по всему миру, у нас есть ~ 12 миллиардов тиков в день, мы храним каждую цену Bid, Ask и сделку, включая объемы и атрибуты тика (bid, ask, trade ) любой из указанных бирж.
У нас есть 253 типа данных тиков для любого конкретного контракта (в основном статистика) в этой таблице, последняя торгуемая цена - это тип тика = 4, поэтому, когда нам нужно получить "последнюю" цену, мы используем:
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
Вы можете увидеть план выполнения в моей системе разработки, он выполняется достаточно эффективно, выполняется за 4 секунды, в то время как ETL импорта обмена закачивает данные в таблицу, будет некоторая блокировка, замедляющая меня ... именно так работают живые системы.

SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)