Каков наиболее эффективный способ чтения последней строки с помощью SQL Server?
Таблица индексируется по уникальному ключу - «нижние» значения ключа представляют последнюю строку.
sql
sql-server
рп.
источник
источник
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
источник
SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)
источник
Таким образом вы получаете последнюю запись и обновляете поле в 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)
источник
Я почти уверен, что это так:
SELECT last(column_name) FROM table
Потому что я использую нечто подобное:
SELECT last(id) FROM Status
источник