LAG 函数和 WITH 子句的语法错误 [duplicate]

Syntax error with LAG function and WITH clause [duplicate]

提问人:Alvaro C 提问时间:10/17/2023 最后编辑:marc_sAlvaro C 更新时间:10/17/2023 访问量:35

问:

我目前正在使用 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 命令。

我检查了列和表名中的拼写错误,但一切都是正确的。我很感激任何关于我在这里错过的内容的建议。

sql-server 语法错误 与语句

评论

1赞 Thom A 10/17/2023
您的 CTE 声明后没有声明。您需要对 CTE 做一些事情

答:

-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 。尽管您发布的查询是有效的语法。