派生 table 不允许删除

Derived table not allowed for delete

我的数据看起来像-

+-------+------------+------------+
|  ID   | START_DATE |  END_DATE  |
+-------+------------+------------+
| 12345 | 11/09/2008 | 02/02/2011 |
| 12345 | 11/09/2008 | 11/09/2008 |
| 12345 | 02/02/2011 | 12/31/9999 |
+-------+------------+------------+

我希望它变成什么样子-

+-------+------------+------------+
|  ID   | START_DATE |  END_DATE  |
+-------+------------+------------+
| 12345 | 11/09/2008 | 02/02/2011 |
| 12345 | 02/02/2011 | 12/31/9999 |
+-------+------------+------------+

基本上我删除了 IDSTART_DATE 列下的重复项并保留最新的 END_DATE一个

我的查询- 使用这个我可以看到重复项

 SELECT * FROM (SELECT ID,START_DATE,END_DATE,
   ROW_NUMBER() OVER (PARTITION BY ID, START_DATE order by END_DATE desc) RN
 FROM MYTABLE) a WHERE a.RN>1

上面的 SELECT 查询工作正常但是当我尝试 DELETE 使用像这样的相同查询时 -

 DELETE FROM (SELECT ID,START_DATE,END_DATE,
   ROW_NUMBER() OVER (PARTITION BY ID, START_DATE order by END_DATE desc) RN
 FROM MYTABLE) a WHERE a.RN>1

我得到提示 -

ERROR [42000] [Teradata][ODBC Teradata Driver][Teradata Database] Syntax error: derived table not allowed for delete.

我的问题-

有没有一种方法可以在不进入派生表的情况下删除这些重复项,或者有什么方法可以在不使用派生表的情况下转换当前查询

如果您在 (id, start_date, end_date) 上没有重复项,那么您可以这样做:

delete from mytable t
    where t.end_date < (select max(t2.end_date)
                        from mytable t2
                        where t2.id = tid and t2.start_date = t.start_date
                       );

您可以删除第一个查询选择的记录并使用它们的 ID:

Delete from MYTABLE WHERE ID IN (
 SELECT ID FROM (SELECT ID,START_DATE,END_DATE,
   ROW_NUMBER() OVER (PARTITION BY ID, START_DATE order by END_DATE desc) RN
 FROM MYTABLE) a WHERE a.RN>1)