我有这个数据,我必须删除重复的数据,以黄色突出显示。我试着使用不同的和分组的,但它似乎不起作用。
即使注释和值不同,任何具有CRIMSSTANDARD值的值在本例中都被视为父字段的子级,因此被视为重复,因为前6个字段是相同的。在这种情况下,如何删除重复记录?
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;;;
发布于 2022-05-11 12:31:09
雪花中没有distinct on
,但是使用qualify
可以得到类似的结果
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_comm
、amt_comm
和ID
非空优先级的行的优先级,可以修改订单条件:
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
中的第一位。它按第一个元素排序,如果有几行具有相同的第一个元素,则按第二个元素排序,以此类推。
发布于 2022-05-11 20:24:34
首先,您需要消除彼此之间的整个重复行(这将解决数据中的第1行和第3行问题,其中的行完全相同)。使用这里概述的方法:如何删除雪花数据库表中的重复记录
接下来,尝试消除前6列的重复,并删除CRIMSSTANDARD在注释列中指定的子记录:
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;
https://stackoverflow.com/questions/72207175
复制