SQL中的函数限制无法正常工作
我正在尝试从用户处获取最新条目,并使用以下语句:SQL中的函数限制无法正常工作,sql,sql-server,greatest-n-per-group,Sql,Sql Server,Greatest N Per Group,我正在尝试从用户处获取最新条目,并使用以下语句: SELECT [username] ,[Name] ,[Surname] ,[Email] ,[Phone] ,[Mobile] ,[Query] FROM [ECom].[dbo].[Queries] ORDER BY [ECom].[dbo].[Queries].[username] DESC LIMIT 1 我得到以下错误: Msg 102,15级,状态1,第1
SELECT [username]
,[Name]
,[Surname]
,[Email]
,[Phone]
,[Mobile]
,[Query]
FROM [ECom].[dbo].[Queries]
ORDER BY [ECom].[dbo].[Queries].[username] DESC LIMIT 1
我得到以下错误:
Msg 102,15级,状态1,第12行
“LIMIT”附近的语法不正确
PS:我也在这样尝试,但错误不断出现:
SELECT [username]
,[Name]
,[Surname]
,[Email]
,[Phone]
,[Mobile]
,[Query]
FROM [ECom].[dbo].[Queries]
ORDER BY [username] DESC LIMIT 1
错误消息表明您正在运行SQL Server,标识符周围使用方括号也是如此
limit
在SQL Server中不是一件易事。相反,请使用top
:
SELECT TOP (1) [username]
,[Name]
,[Surname]
,[Email]
,[Phone]
,[Mobile]
,[Query]
FROM [ECom].[dbo].[Queries]
ORDER BY [username] DESC
启动SQL Server 2012时,可以使用fetch
子句,这是标准的ANSI SQL(尽管它没有在MySQL中实现…):
如果您想要每个用户的最后一条记录,那么这是一个不同的问题。一个选项使用窗口功能:
select *
from (
select q.*, row_number over(partition by username order by ?? desc) rn
from ecom.dbo.queries q
) q
where rn = 1
??
应替换为定义每个用户行顺序的列的名称
您也可以使用fetch
的top
执行此操作,但您需要将窗口函数置于order by
子句中:
select top (1) with ties q.*
from ecom.dbo.queries q
order by row_number over(partition by username order by ?? desc) rn
代码是sqlserver,它具有TOP而不是limit。(错误消息也是sqlserver)但这只显示一条记录,我想显示每条记录的最后一条记录user@Burdy:这在你最初的问题中一点也不清楚。。。应该使用哪一列来订购每个用户的记录?很抱歉,必须使用的列是用户名,因为我想从每个用户处获取最新的查询username@Burdy. 编辑后的答案就是这样。如前所述,您只需选择正确的列对记录进行排序。
select top (1) with ties q.*
from ecom.dbo.queries q
order by row_number over(partition by username order by ?? desc) rn