我需要一个查询来删除所有重复的记录,但只保留一个基于valid_until日期列的最新记录.我试了试下面的,但上面写着An expression of non-boolean type specified in a context where a condition is expected, near ','.

DELETE FROM tableOne
WHERE (id, valid_until ) NOT IN (
  SELECT id, MAX(valid_until )
  FROM tableOne
  GROUP BY id
)

推荐答案

您可以使用可更新的CTE.

CREATE TABLE Employees (
  id INT,
  name VARCHAR(50),
  valid_until DATE
);

INSERT INTO Employees (id, name, valid_until) VALUES
  (1, 'John Doe', '2022-06-30'),
  (2, 'Jane Smith', '2023-01-15'),
  (3, 'Michael Johnson', '2021-12-31'),
  (1, 'John Doe', '2023-06-30'),
  (2, 'Jane Smith', '2024-03-22');

WITH CTE AS (
  SELECT
    id,
    valid_until,
    ROW_NUMBER() OVER (PARTITION BY id ORDER BY valid_until DESC) AS row_num
  FROM Employees
)
DELETE FROM CTE 
WHERE row_num > 1;

SQL Fiddle

Sql相关问答推荐

查询将查找将标记设置为user2的用户

判断时间之间是否有时间

Postgresql -如何计算刷卡和刷卡时间

如何将资源密集型自连接转换为更快的查询?

R中对Arrow duckdb工作流的SQL查询

为什么在这种情况下我不能使用LAG函数?

分组多输出访问查询问题

编写一个SQL查询来返回收视率较高的类型,并取这些收视率的平均值,我该如何做呢?

如何计算一个用户S的日常连胜?

对表进行多项 Select 以返回最大值和时间

查询页面推荐

如何使用SQL Server中的Nodes()方法执行与OPENXML相同的操作

将FLOAT转换为VARBINARY,然后再转换回FLOAT

每小时 Select 1行

SQL Athena/prest判断值是否在嵌套的json数组中

更正用于判断错误组合的SQL

获取主表条目,其中最新的辅助条目是 6 个月前

SQL 根据前一天的最大值计算每天的值数

如何使用 join 和 where 子句从另一表中仅删除一个表中的值

Postgres存在限制问题「小值」