为什么cte return 报错说它不存在?

Why does the cte return the error that it does not exist?

这是我的代码

WITH CTE AS(
    SELECT COUNT(CASE name WHEN 'John' THEN 1 END) OVER (PARTITION BY BlockID ORDER BY Step) AS Johns
    FROM dbo.YourTable)
DELETE FROM CTE
WHERE Johns >= 1;
SELECT *
FROM dbo.YourTable;

当我运行笔记本

中的代码时,returns我出现了以下错误
ERROR: syntax error at or near "DELETE"

但我似乎找不到查询中的任何错误

当我尝试在在线编译器中执行它时 returns relation "cte" does not exist 的错误 也许这个错误可能是相关的?...

这是我想用 cte 做的事情: 我的第一个 table:

Block_id step name 
1         1    Marie 
1         2    Bob
1         3    John
1         4    Lola
2         1    Alex
2         2    John
2         3    Kate
2         4    Herald
3         1    Alec
3         2    Paul
3         3    Rex

如您所见,数据框按 block_id 排序,然后逐步排序。我只想删除一个 block_id 中我名为 John 的行(也有 John 的行)之后的所有内容。所以期望的输出是

Block_id step name 
1         1    Marie 
1         2    Bob
2         1    Alex
3         1    Alec
3         2    Paul
3         3    Rex

为第一个 John 的每个 Block_id 创建一个 returns 的 CTE。
然后加入 table 到 CTE:

WITH cte AS (
  SELECT Block_id, MIN(step) step
  FROM tablename
  WHERE name = 'John'
  GROUP BY Block_id
)
DELETE FROM tablename t
USING cte c
WHERE c.Block_id = t.Block_id AND c.step <= t.step

参见demo