Delete语句不适用于十进制列

时间:2018-07-23 11:30:30

标签: sql teradata sql-delete

我正在处理以下删除语句:

DEL FROM X.SALES1
WHERE CAST(SALES_T_ID AS DECIMAL(18,0)) IN(

SEL CAST(T1.SALES_T_ID AS DECIMAL(18,0) )FROM
(
SEL *  FROM 
X.SALES1
QUALIFY ROW_NUMBER() OVER( PARTITION BY SALES_SRC_ID,DSTC ORDER BY UPDATED_DATE_TIMESTAMP DESC) >1
) T1
) ; 

上述删除应保留最新记录,并删除其余记录。 但是,它将删除所有记录。 我已经检查了内部查询,并且工作正常,仅选择记录而不是最新更新的记录。 但是我不明白为什么要删除所有记录?

下面是表格结构:

CREATE SET TABLE X.SALES1 ,FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO,
     MAP = TD_MAP1
     (
      SALES_T_ID DECIMAL(18,0),
      SALES_TRANS_NUM VARCHAR(30) CHARACTER SET LATIN NOT CASESPECIFIC,
      SALES_SRC_ID VARCHAR(20) CHARACTER SET LATIN NOT CASESPECIFIC,
      SALES_TRANS_START_DTTM TIMESTAMP(0),
      ST_EXPECTED_CLOSE_DTTM TIMESTAMP(0),
      ST_ACTUAL_CLOSE_DTTM TIMESTAMP(0),
      ST_ACT_CONT_DTTM TIMESTAMP(0),
      ST_EXP_CONT_CLS_DTTM TIMESTAMP(0)
)
PRIMARY INDEX ( SALES_T_ID );

样本数据:

SALES_T_ID SALES_SRC_ID
715,603    3-3SDDJH5
593,803    3-3SDDJH5
715,604    3-3SDDJIG
593,804    3-3SDDJIG
715,605    3-3SDDJJR

编辑: enter image description here

我的要求是仅保留最新行 用于基于updated_date_timestamp的Sales_trans_src_id和data_source_type_cd的组合。

1 个答案:

答案 0 :(得分:0)

DEL FROM X.SALES1
WHERE CAST(SALES_T_ID AS DECIMAL(18,0)) IN(

SEL CAST(T1.SALES_T_ID AS DECIMAL(18,0) )FROM
(
SEL *  FROM 
X.SALES1
QUALIFY rank() OVER( PARTITION BY SALES_SRC_ID,DSTC ORDER BY UPDATED_DATE_TIMESTAMP DESC) > 1
) T1
;

可以检查一下吗 );