使用SQL Server读取最后一行的最有效方法是什么?
表格在唯一键上编制索引 - “底部”键值代表最后一行。
答案 0 :(得分:161)
如果您正在使用MS SQL,可以尝试:
SELECT TOP 1 * FROM table_Name ORDER BY unique_column DESC
答案 1 :(得分:21)
select whatever,columns,you,want from mytable
where mykey=(select max(mykey) from mytable);
答案 2 :(得分:17)
您需要在表中使用某种唯一标识列,例如自动填充主键或日期时间列(最好是主键)。然后你可以这样做:
SELECT * FROM table_name ORDER BY unique_column DESC LIMIT 1
ORDER BY column
告诉它根据该列的数据重新排列结果,DESC
告诉它反转结果(从而将最后一个放在第一位)。之后,LIMIT 1
告诉它只传回一行。
答案 3 :(得分:10)
如果您的某些ID符合规定,我假设您的数据库中会有一些订单
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
答案 4 :(得分:3)
我认为下面的查询适用于SQL Server,具有最高性能而没有任何可排序的列
SELECT * FROM table
WHERE ID not in (SELECT TOP (SELECT COUNT(1)-1
FROM table)
ID
FROM table)
希望你理解它......:)
答案 5 :(得分:3)
我尝试在SQl服务器2008中使用sql查询中的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)
答案 6 :(得分:2)
您可以使用last_value:SELECT LAST_VALUE(column) OVER (PARTITION BY column ORDER BY column)...
我在我的一个数据库上测试它,它按预期工作。
您还可以在此处查看de documentation:https://msdn.microsoft.com/en-us/library/hh231517.aspx
答案 7 :(得分:2)
试试这个
SELECT id from comission_fees ORDER BY id DESC LIMIT 1
答案 8 :(得分:1)
为了检索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;
答案 9 :(得分:0)
选择*
从表名
按unique_column desc订购
偏移0行
仅下1行
答案 10 :(得分:0)
好吧,我没有得到表中的“最后价值”,而是得到了每种金融工具的“最后价值”。并不相同,但我认为这与一些正在寻找“现在如何完成”的人有关。我还使用了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秒钟内执行,而Exchange导入ETL将数据泵入表中时,会有一些锁定使我慢下来...这就是实时系统的运行方式工作。
答案 11 :(得分:0)
如果您没有任何有序列,则可以使用每行的物理ID:
SELECT top 1 sys.fn_PhysLocFormatter(%%physloc%%) AS [File:Page:Slot],
T.*
FROM MyTable As T
order by sys.fn_PhysLocFormatter(%%physloc%%) DESC
答案 12 :(得分:0)
如果你有一个Replicated表,你可以在localDatabase中拥有一个Identity = 1000,在clientDatabase中拥有一个Identity = 2000,所以如果你抓住了最后一个ID,你可能总是找到客户端的最后一个ID,而不是当前连接的最后一个ID数据库。 因此,返回最后连接数据库的最佳方法是:
SELECT IDENT_CURRENT('tablename')
答案 13 :(得分:0)
这是获取最后一条记录并更新Access DB中字段的方法。
更新 compalints
SET tkt = addzone &'-'& customer_code &'-'& sn where sn in (select max(sn) from compalints )
答案 14 :(得分:0)
SELECT * from Employees where [Employee ID] = ALL (SELECT MAX([Employee ID]) from Employees)
答案 15 :(得分:-1)
SELECT * FROM TABLE WHERE ID = (SELECT MAX(ID) FROM TABLE)
答案 16 :(得分:-5)
我很确定它是:
SELECT last(column_name) FROM table
因为我使用类似的东西:
SELECT last(id) FROM Status