Как прочитать последнюю строку с SQL Server

Каков наиболее эффективный способ чтения последней строки с SQL Server?

Таблица индексируется по уникальному ключу - значения "нижней" клавиши представляют последнюю строку.

Ответ 1

Если вы используете MS SQL, вы можете попробовать:

SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC 

Ответ 2

select whatever,columns,you,want from mytable
 where mykey=(select max(mykey) from mytable);

Ответ 3

В таблице вам понадобится какой-то однозначно идентифицирующий столбец, например, первичный ключ автозаполнения или столбец datetime (предпочтительно первичный ключ). Затем вы можете сделать это:

SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1

ORDER BY column сообщает, что он перенастраивает результаты в соответствии с данными столбца, а DESC сообщает об этом, чтобы отменить результаты (таким образом, сначала поставить последний). После этого LIMIT 1 сообщает ему, что он возвращает только одну строку.

Ответ 4

Если какой-то ваш идентификатор в порядке, я предполагаю, что в вашем db

будет какой-то порядок,

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

Ответ 5

Я попытался использовать последний запрос sql на сервере SQl 2008, но он дает это err: "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)

Ответ 6

Я думаю, что ниже запрос будет работать для SQL Server с максимальной производительностью без сортировки столбца

SELECT * FROM table 
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1 
                             FROM table) 
                        ID 
                 FROM table)

Надеюсь, вы это поняли...:)

Ответ 7

Попробуйте

SELECT id from comission_fees ORDER BY id DESC LIMIT 1

Ответ 8

Вы можете использовать last_value: SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...

Я тестирую его в одной из моих баз данных и работает как ожидалось.

Вы также можете проверить документацию здесь: https://msdn.microsoft.com/en-us/library/hh231517.aspx

Ответ 9

Чтобы получить последнюю строку таблицы для базы данных 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; 

Ответ 10

SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)

Ответ 11

Вот как вы получаете последнюю запись и обновляете поле в БД доступа.

ОБНОВЛЕНИЕ compalints SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )

Ответ 12

Если у вас есть реплицированная таблица, вы можете иметь Identity = 1000 в localDatabase и Identity = 2000 в clientDatabase, поэтому, если вы поймаете последний идентификатор, вы всегда можете найти последнего от клиента, а не последнее от текущего подключенного база данных. Таким образом, лучшим методом, который возвращает последнюю подключенную базу данных, является:

SELECT IDENT_CURRENT('tablename')

Ответ 13

Если у вас нет упорядоченного столбца, вы можете использовать физический идентификатор каждой строки:

SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot], 
              T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC

Ответ 14

Ну, я не получаю "последнее значение" в таблице, я получаю последнее значение для каждого финансового инструмента. Это не то же самое, но я думаю, что это актуально для тех, кто хочет посмотреть, "как это делается сейчас". Я также использовал RowNumber() и CTE, а до этого просто взял 1 и порядок по [column] desc. Однако мы не должны больше...

Я использую SQL Server 2017, мы записываем все тики на всех биржах по всему миру, у нас ~ 12 миллиардов тиков в день, мы храним каждую заявку, а также торгуем, включая объемы и атрибуты тика (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

Вы можете увидеть план выполнения в моей системе dev, он выполняется довольно эффективно, выполняется за 4 секунды, в то время как ETL обмена импорта перекачивает данные в таблицу, будет некоторая блокировка, замедляющая меня... как работает живая система. execution plan against 85,697,659 rows

Ответ 15

ВЫБРАТЬ *

FROM table_name

ORDER BY unique_column desc

OFFSET 0 Row

ПОЛУЧИТЬ СЛЕДУЮЩУЮ 1 СТРОКУ ТОЛЬКО

Ответ 16

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

Ответ 17

Я уверен, что это:

SELECT last(column_name) FROM table

Becaause Я использую нечто похожее:

SELECT last(id) FROM Status