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


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

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

16 74

16 ответов:

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

SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC 
select whatever,columns,you,want from mytable
 where mykey=(select max(mykey) from mytable);

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

SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1

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

Если некоторые из ваших идентификаторов в порядке, я предполагаю, что в вашей БД будет какой-то порядок

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

Я пробовал использовать last в sql query в SQl server 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)

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

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

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

попробуй такое

SELECT id from comission_fees ORDER BY id DESC LIMIT 1

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

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

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

чтобы получить последнюю строку таблицы для базы данных 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 * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)

Так вы получаете последнюю запись и обновляете поле в Access DB.

обновлениеcompalintsSET 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 и упорядочил по [столбцу] desc. однако нам это больше не нужно...

Я использую 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

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

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

я почти уверен, что это:

SELECT last(column_name) FROM table

потому что я использую что-то подобное:

SELECT last(id) FROM Status