Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不允许删除派生表_Sql_Teradata - Fatal编程技术网

Sql 不允许删除派生表

Sql 不允许删除派生表,sql,teradata,Sql,Teradata,我的数据看起来像- 我希望它是怎样的- 基本上,我正在删除列ID和开始日期下的重复项,并保留最新的结束日期 我的查询-使用此选项,我可以看到重复项 上面的SELECT查询工作得很好,但是当我尝试使用类似这样的查询删除时- 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

我的数据看起来像-

我希望它是怎样的-

基本上,我正在删除列ID和开始日期下的重复项,并保留最新的结束日期

我的查询-使用此选项,我可以看到重复项

上面的SELECT查询工作得很好,但是当我尝试使用类似这样的查询删除时-

 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数据库] 语法错误:不允许删除派生表

我的要求-


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

如果id、开始日期、结束日期上没有重复项,则可以执行以下操作:

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 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)

您可以删除第一个查询选择的记录并使用其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)

这是删除所有记录。这是删除所有记录。这不会同时删除所有记录吗?因为ID将与这两个条目匹配。这不会删除这两个记录吗?因为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)