如何使用SQL Server读取最后一行

时间:2008-10-07 05:34:40

标签: sql sql-server

使用SQL Server读取最后一行的最有效方法是什么?

表格在唯一键上编制索引 - “底部”键值代表最后一行。

17 个答案:

答案 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将数据泵入表中时,会有一些锁定使我慢下来...这就是实时系统的运行方式工作。 execution plan against 85,697,659 rows

答案 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