【发布时间】:2017-05-11 20:03:10
【问题描述】:
我的数据看起来像 -
+-------+------------+------------+
| 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 |
+-------+------------+------------+
基本上我会删除 ID 和 START_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
我收到提示 -
错误 [42000] [Teradata][ODBC Teradata 驱动程序][Teradata 数据库] 语法错误:派生表不允许删除。
我的问题 -
有没有一种方法可以在不进入派生表的情况下删除这些骗子,或者以任何其他方式在不使用派生表的情况下转换当前查询
【问题讨论】: