Ну, я не получаю «последнее значение» в таблице, я получаю последнее значение для каждого финансового инструмента. Это не то же самое, но я думаю, что это актуально для тех, кто хочет посмотреть, «как это делается сейчас». Я также использовал RowNumber () и CTE, а до этого просто взял 1 и порядок по [column] desc. однако нам больше не нужно ...
Я использую SQL Server 2017, мы записываем все тики на всех биржах по всему миру, у нас ~ 12 миллиардов тиков в день, мы храним каждую ставку, спросим и торгуем, включая объемы и атрибуты тика (bid, спроси, обменяй) на любую из данных бирж.
У нас есть 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 импорта обмена перекачивает данные в таблицу, будет некоторая блокировка, замедляющая меня ... это просто живые системы Работа.