提问人:Alvaro C 提问时间:10/17/2023 最后编辑:marc_sAlvaro C 更新时间:10/17/2023 访问量:35
LAG 函数和 WITH 子句的语法错误 [duplicate]
Syntax error with LAG function and WITH clause [duplicate]
问:
我目前正在使用 SQL Server 2022,我的数据库的兼容级别为 160,但是当我尝试执行此语句时:
WITH CTE AS
(
SELECT
Id,
LAG(Id) OVER (ORDER BY Id) AS previous_id,
Date,
LAG(Date) OVER (ORDER BY Id) AS previous_date
FROM
dbo.Bellabeat_daily
)
我收到以下错误:
消息 102,级别 15,状态 1,第 6
行 “)”附近的语法不正确。
第 6 行对应于 FROM 命令。
我检查了列和表名中的拼写错误,但一切都是正确的。我很感激任何关于我在这里错过的内容的建议。
答:
-1赞
SelVazi
10/17/2023
#1
正确的语法:
WITH CTE AS(
SELECT Id,
LAG(Id) OVER (ORDER BY Id) AS previous_id,
Date,
LAG(Date) OVER (ORDER BY Id) AS previous_date
FROM dbo.Bellabeat_daily
)
SELECT *
FROM CTE
评论
3赞
Thom A
10/17/2023
如果你只是要从CTE开始,为什么还要这样做?SELECT *
0赞
Alvaro C
10/17/2023
我没有表现出我的全部疑问,因为我不知道该怎么问。但是,我需要 WITH 子句在另一个查询中引用一些别名。这是完整的查询:WITH CTE AS( SELECT Id, LAG(Id) OVER (ORDER BY Id) AS previous_id, Date, LAG(Date) OVER (ORDER BY Id) AS AS previous_date FROM DBO。Bellabeat_daily ) SELECT Id, previous_id, Date, previous_date, CASE WHEN Date IS NOT NULL THEN Date WHEN Date IS NULL AND (previous_date IS NULL) THEN NULL ELSE DATEADD(day, 1, previous_date) END AS ResultingDate FROM CTE WHERE ID = previous_id
0赞
Thom A
10/17/2023
有一个编辑功能,@AlvaroC 。尽管您发布的查询是有效的语法。
评论