sql - CTE 与 DELETE - SQL 数据仓库的替代方案

标签 sql azure-sql-database common-table-expression sql-delete azure-synapse

我想删除表中batchId(运行编号)早于前两行的所有行。我可以在 SQL 数据库中使用以下查询来执行此操作:

WITH CTE AS(
    SELECT
        *,
        DENSE_RANK() OVER(ORDER BY BATCHID DESC) AS RN
    FROM MyTable
)
DELETE FROM CTE WHERE RN>2

但是在 SQL 数据仓库中不允许这样做 this 。在这里寻找替代方案。

最佳答案

您可以尝试使用 JOIN

delete d from MyTable d
join 
(
 SELECT
        *,
        RN = ROW_NUMBER() OVER(PARTITION BY BATCH_ID ORDER BY BATCH_ID DESC)
    FROM MyTable
)A on d.batch_id=A.batch_id where RN >2

关于sql - CTE 与 DELETE - SQL 数据仓库的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54624737/

相关文章:

mysql - SQLYog 为 MySQL 设置变量返回 null

mySQL 与 where 条件连接

sql - CTE 和子查询之间的区别?

asp.net - SQL CE azure 连接

mysql - 将数据从 Blob 移动到 SQL 数据库

sql - CTE中的UNION ALL

sql - 使用 CTE 优化时态表

sql - Oracle 正则表达式列出两个字符串之间的唯一字符差异

php - 具有多个命名参数的 PDO bindParam()

c# - 此版本的 SQL Server 不支持已弃用的功能 'INSERT NULL into TIMESTAMP columns'