Який найефективніший спосіб читати останній рядок за допомогою 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
унікальний ідентифікатор, цей підхід не допоможе
Вам знадобиться якийсь однозначно ідентифікуючий стовпець у вашій таблиці, наприклад, автозаповнення первинного ключа або стовпця дати та часу (бажано первинного ключа). Тоді ви можете зробити це:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
Тест ORDER BY column
повідомляє йому, щоб переставити результати відповідно до даних цього стовпця, а 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)
Сподіваюся, ви це зрозуміли ... :)
Я спробував використати останній запит у 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 для досягнення підкачки під час відображення результатів.
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 і впорядкував за [стовпець] desc. однак нам більше не потрібно ...
Я використовую SQL Server 2017, ми реєструємо всі галочки на всіх біржах у всьому світі, у нас є ~ 12 мільярдів галочок на день, ми зберігаємо кожну заявку, запитуємо і торгуємо, включаючи обсяги та атрибути галочки (заявка, запитання, торгівля ) будь-якої з даних бірж.
У цій таблиці ми маємо 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)