我可以在 SQL 中执行除非查询吗?使用 row_num 查询

时间:2021-02-04 00:27:09

标签: sql-server

我正在运行查询以保留基于移动设备的最后提交的记录。我已经确定了这个过程,正如您在下面的查询示例中看到的那样。

WITH cte AS (
SELECT 
   mobile,
   submission_date, 
   source,
   ROW_NUMBER() OVER (
      PARTITION BY mobile
      ORDER BY mobile, submission_date DESC
   ) row_num
FROM 
   table
    )
DELETE FROM cte
WHERE row_num > 1

我想调整这个查询来满足这个新需求。这是一些示例数据。

<头>
id 移动 提交日期 来源
1 0400000000 06-06-2020 AAAA
2 0400000000 05-05-2020 BBBB
3 0411111111 09-09-2020 BBBB
4 0411111111 08-08-2020 BBBB
5 0422222222 08-08-2020 AAAA

如果源 = AAAA,我希望只能删除第 1 行,除非第 2 行不存在。

我也希望能够说一些类似的内容

DELETE FROM cte
WHERE row_num = 1 AND source in ('AAAA')
UNLESS row 2 does not exist

这将允许我保留记录 5,即使它是第 1 行且来源为 AAAA,因为没有第二条记录具有相同的手机号码。换句话说,记录 1 将是使用示例数据删除的唯一记录。

0 个答案:

没有答案