使用SQL Server读取最后一行的最有效方法是什么?
该表在唯一键上建立索引-“底部”键值代表最后一行。
Answers:
如果您使用的是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
告诉它根据该列的数据,以rearange结果,并且DESC
告诉它扭转结果(从而把最后一个第一)。在那之后,LIMIT 1
告诉它只传回一行。
我在SQl服务器2008中尝试在SQL查询中使用last,但它给出此错误消息:“'last'不是公认的内置函数名称。”
所以我最终使用了:
select max(WorkflowStateStatusId) from WorkflowStateStatus
获取最后一行的ID。一个人也可以使用
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/zh-cn/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 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
这是您获取最后一条记录并更新Access DB中的字段的方式。
更新 compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
如果您没有任何有序的列,则可以使用每行的物理ID:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
好吧,我没有得到表中的“最后价值”,而是得到了每种金融工具的“最后价值”。并不相同,但我认为这与某些正在寻找“现在如何完成”的人有关。我还使用了RowNumber()和CTE,在此之前,我仅采用1并按[column] desc排序。但是我们不再需要...
我正在使用SQL Server 2017,我们正在记录全球所有交易所上的所有报价,每天大约有120亿个报价,我们存储每个报价,要价和交易,包括报价的数量和属性(要价,要价,交易) )任何给定的交易所。
在该表中,任何给定合约(主要是统计数据)的253个报价数据类型,最后交易价格为tick type = 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)