首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从雪花中删除这些数据的副本?

如何从雪花中删除这些数据的副本?
EN

Stack Overflow用户
提问于 2022-05-11 20:19:28
回答 2查看 627关注 0票数 1

我有这个数据,我必须删除重复的数据,以黄色突出显示。我试着使用不同的和分组的,但它似乎不起作用。

即使注释和值不同,任何具有CRIMSSTANDARD值的值在本例中都被视为父字段的子级,因此被视为重复,因为前6个字段是相同的。在这种情况下,如何删除重复记录?

代码语言:javascript
代码运行次数:0
运行
复制
CLIENT;CLIENT_ID;QTY_TYPE;QUANTITY;AMOUNT;TRANTYPE;COMMENT;VALUE;ORDER_ID;DEV_COMM;AMT_COMM;ID
TEST_IMPL8;P-AGNIndPlusFd;A;;140000;Sell;INS;CRIMSSTANDARD;10902601;;;
TEST_IMPL8;P-AGNIndPlusFd;Q;2898;;Buy;INS;CRIMSSTANDARD;10902701;;;
TEST_IMPL8;P-AGNIndPlusFd;A;;140000;Sell;INS;CRIMSSTANDARD;10902601;;;
TEST_IMPL8;P-DepVz;A;;82000;Sell;GEN,TransferOrder;10902568;Y;0;
TEST_IMPL8;P-DepVz;A;;82000;Sell;INS;CRIMSSTANDARD;10902568;;;
TEST_IMPL8;P-DivBnd2Vv;A;;4862.09;Buy;GEN;OHPEN_14613296BD001571;10902668;;;14613296BD001571
TEST_IMPL8;P-DivBnd2Vv;A;;4862.09;Buy;INS;CRIMSSTANDARD;10902668;;;
TEST_IMPL8;P-Dyn4Vz;A;;13000;Buy;INS;CRIMSSTANDARD;10877286;;;
TEST_IMPL8;P-EmuCoInsBVv;Q;524.6892;;Sell;GEN;OHPEN_14613296BD001565;10677375;;;14613296BD001565
TEST_IMPL8;P-EmuCoInsBVv;Q;524.6892;;Sell;INS;CRIMSSTANDARD;10677375;;;
TEST_IMPL8;P-VNAMijBel;Q;10236;;Sell;INS;CRIMSSTANDARD;11402183;;;
EN

回答 2

Stack Overflow用户

发布于 2022-05-11 20:31:09

雪花中没有distinct on,但是使用qualify可以得到类似的结果

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * FROM my_table
QUALIFY ROW_NUMBER() OVER (
  PARTITION BY client, client_id, qty_type, quantity, amount, trantype, value 
  ORDER BY client, client_id, qty_type, quantity, amount, trantype, value
) = 1;

请参阅这里以查看更多详细信息

编辑:

要保持具有dev_commamt_commID非空优先级的行的优先级,可以修改订单条件:

代码语言:javascript
代码运行次数:0
运行
复制
SELECT * FROM my_table
QUALIFY ROW_NUMBER() OVER (
  PARTITION BY client, client_id, qty_type, quantity, amount, trantype, value 
  ORDER BY 
    IFF(dev_comm IS NOT NULL, 0, 1), 
    IFF(amt_comm IS NOT NULL, 0, 1), 
    IFF(ID IS NOT NULL, 0, 1)
) = 1;

通过对order by中的字段进行排序,您还可以有不同的优先级。例如,如果有多行具有dev_comm列,但希望优先使用具有ID的行,则需要将iff(ID ...放在order by中的第一位。它按第一个元素排序,如果有几行具有相同的第一个元素,则按第二个元素排序,以此类推。

票数 1
EN

Stack Overflow用户

发布于 2022-05-12 04:24:34

首先,您需要消除彼此之间的整个重复行(这将解决数据中的第1行和第3行问题,其中的行完全相同)。使用这里概述的方法:如何删除雪花数据库表中的重复记录

接下来,尝试消除前6列的重复,并删除CRIMSSTANDARD在注释列中指定的子记录:

代码语言:javascript
代码运行次数:0
运行
复制
begin work;
delete from
    my_table using (
        select
            CLIENT,
            CLIENT_ID,
            QTY_TYPE,
            QUANTITY,
            AMOUNT,
            TRANTYPE
        from
            my_table
        GROUP BY
            CLIENT,
            CLIENT_ID,
            QTY_TYPE,
            QUANTITY,
            AMOUNT,
            TRANTYPE
        HAVING
            COUNT(*) > 1
    ) as my_table_dupes
where
    my_table.CLIENT = X.CLIENT
    AND my_table.CLIENT_ID = my_table_dupes.CLIENT_ID
    AND my_table.QTY_TYPE = my_table_dupes.QTY_TYP
    AND my_table.QUANTITY = my_table_dupes.QUANTITY
    AND my_table.AMOUNT = my_table_dupes.AMOUNT
    AND my_table.TRANTYPE = my_table_dupes.TRANTYPE
    AND my_table.COMMENT = 'CRIMSSTANDARD' 
commit work;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72207175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档