如何在 Netezza(Aginity) 中删除这些记录

Posted

技术标签:

【中文标题】如何在 Netezza(Aginity) 中删除这些记录【英文标题】:How to Delete these Records in Netezza(Aginity) 【发布时间】:2017-09-10 09:38:39 【问题描述】:

我编写了一个查询来识别重复记录。

如下。

WITH DUPS AS
  (SELECT A_SURVEYID,
    CAST(e_responsedate AS DATE) AS e_responsedate,
    E_LG_VM_SURVEY_TYPE_ENUM
  FROM TRANSIENT..INTERIM_NPS_SURVEY_MOBILE_RESULTS_20170909 a
  GROUP BY A_SURVEYID,
    CAST(e_responsedate AS DATE),
    E_LG_VM_SURVEY_TYPE_ENUM
 HAVING COUNT(*) > 1
  ),
  RANKED AS
  (SELECT R.DRS_RECORD_ID,
    R.A_SURVEYID,
    R.e_responsedate ,
    ROW_NUMBER() OVER ( PARTITION BY R.A_SURVEYID, CAST(R.e_responsedate AS DATE),
       R.E_LG_VM_SURVEY_TYPE_ENUM ORDER BY SUBSTR(R.DRS_RECORD_ID, INSTR(':', R.DRS_RECORD_ID, 37) + 1, 14) DESC,
       SUBSTR(R.DRS_RECORD_ID, INSTR(':', R.DRS_RECORD_ID, 32) + 1, 4) ASC ) AS DR
  FROM TRANSIENT..INTERIM_NPS_SURVEY_MOBILE_RESULTS_20170909 R
  INNER JOIN DUPS
  ON R.A_SURVEYID                    = DUPS.A_SURVEYID
  AND CAST(R.e_responsedate AS DATE) = DUPS.e_responsedate
  AND R.E_LG_VM_SURVEY_TYPE_ENUM     = DUPS.E_LG_VM_SURVEY_TYPE_ENUM
  )
 SELECT *
FROM TRANSIENT..INTERIM_NPS_SURVEY_MOBILE_RESULTS_20170909 F
INNER JOIN RANKED
ON F.DRS_RECORD_ID = RANKED.DRS_RECORD_ID
WHERE RANKED.DR     > 1

--

通过使用上述查询能够检索记录。(大约 6000+)。

但我无法删除这些记录。

你能帮我解决这个问题吗?

问候,

克里什

【问题讨论】:

【参考方案1】:

你很亲密。在最后 5 行中,改为这样做:

Delete from FROM TRANSIENT..INTERIM_NPS_SURVEY_MOBILE_RESULTS_2017090
Where DRS_RECORD_ID in (
    Select DRS_RECORD_ID from RANKED WHERE DR>1)

应该工作:)

顺便说一句:我很确定这可以用更少的代码来完成,但这并不重要......

【讨论】:

我通过在 qurey 中添加 delete 来尝试相同的操作,但在 netezza 中出现 [42000] 错误.. 你照我说的做了?我记得用 JOIN 语法删除稍微困难一些。 '42000' 附带的文字是什么,我记不得所有的错误代码了 :)

以上是关于如何在 Netezza(Aginity) 中删除这些记录的主要内容,如果未能解决你的问题,请参考以下文章

保存 Aginity for Netezza 后如何摆脱“外部修改文件”模式

如何从 Aginity 工作台检查在 IBM Netezza SQL 中处理表的数据和时间?

如何从 Aginity 工作台检查在 IBM Netezza SQL 中创建表的数据和时间

从 Python 到 SQL(Aginity、Netezza)的 CREATE/DROP 调用不起作用

Netezza 的 Aginity 工作台不会为大型查询提供语法错误

在 Netezza Aginity 中显示创建表