Oracle将基于2列最大值的重复数据删除行

用户名

想知道是否有人知道一种有效的方法,该方法使用基于2个属性的最大值的Oracle SQL对大型数据集中的记录进行重复数据删除。

在下面的假设示例中,我希望通过首先选择最大的transactionid来删除所有重复的COMPANYID / CHILD ID对。如果有效负载ID仍然有重复项,则为最大BATCHID。

注意:transactionID和batchID可能具有空值(应该是最低值)

表:交易

<p> CompanyID| ChildID | transactionid| BatchID | Product Details </P>
<p> ABC         EFG       306                    Product1 </p>
<p>ABC         EFG       306          54        Product2</p>
<p>ZXY         BFG       405          003       Product1</p>
<p>ZXY         BFG       405          004       Product2</p>
<p>ZXY         BFG       407                    Product3</p>

预期结果:

<p>ABC | EFG | 306 | 54 | Product 2  --selected on basis of highest transactionid and batchid </P>
<p>ZXY | BFG | 405 | 407 | Product 3 --selected on basis of highest transactionid </p>

我的设想很简单:1)在transactionid上使用max函数,然后对结果进行子查询以使batchID达到max2。2)将“重复数据删除”集自动加入到原始集中以获取产品信息

有人知道实现这一目标的更有效/更清洁的方法以及更好地处理null的方法吗?

感谢任何反馈。

伊曼纽尔

在Oracle 11g中,您可以使用这种请求:

with w(CompanyID, ChildID, transactionid, BatchID, Product_Details) as
(
  select 'ABC', 'EFG', 306, null, 'Product1 ' from dual
  union all
  select 'ABC', 'EFG', 306, 54, 'Product2' from dual
  union all
  select 'ZXY', 'BFG', 405, 003, 'Product1' from dual
  union all
  select 'ZXY', 'BFG', 405, 004, 'Product2' from dual
  union all
  select 'ZXY', 'BFG', 407, null, 'Product3' from dual
)
select w.CompanyID,
       w.ChildID,
       max(w.transactionid)   keep (dense_rank last order by nvl(w.transactionid, 0), nvl(w.batchid, 0)) max_transactionid,
       max(w.batchid)         keep (dense_rank last order by nvl(w.transactionid, 0), nvl(w.batchid, 0)) max_batchid,
       max(w.Product_Details) keep (dense_rank last order by nvl(w.transactionid, 0), nvl(w.batchid, 0)) max_Product_Details
from w
group by w.CompanyID, w.ChildID
;

nvl功能允许您处理空情况。这是输出(不适合您的输出,但由于我了解您的要求,所以我做了请求):

COMPANYID    CHILDID    MAX_TRANSACTIONID    MAX_BATCHID    MAX_PRODUCT_DETAILS
ABC          EFG        306                  54             Product2
ZXY          BFG        407                                 Product3

编辑:让我试图进一步解释DENSE_RANKLAST:内GROUP BY,这句法表现为聚合函数(如SUM,AVG ......)。

  • 在一个组中,ORDER BY给出排序(此处为transactionid和batchid)
  • 然后DENSE_RANK LAST指出您将关注此排序的最后排行(实际上,几排具有相同的排行)
  • MAX采取这些排名靠前的行内的最高值。在大多数情况下,您只有一行,因此MAX可能看起来毫无用处,但事实并非如此。因此,您经常会看到MINDENSE_RANK FIRST或或MAXDENSE_RANK LAST

这是有关此主题的Oracle文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用 PowerBI 基于两列的重复数据删除

来自分类Dev

使用 PowerBI 基于两列的重复数据删除

来自分类Dev

从整数中删除重复数字组中的一个重复数字以获取最大值

来自分类Dev

根据列删除重复的行,同时保持下一列的最大值

来自分类Dev

根据Pandas df中另一列中的最大值删除重复行

来自分类Dev

从整个熊猫数据框中返回最大值,而不是基于列或行

来自分类Dev

删除基于2列的重复值

来自分类Dev

重复数据删除Oracle xmlagg列表

来自分类Dev

按列(1、2)重复数据删除,但也按列(2,1)重复数据删除

来自分类Dev

将数据集中的列从指定行中的最大值到最小值排序

来自分类Dev

多索引数据框删除行,每组最大值

来自分类Dev

多维数组值的重复数据删除

来自分类Dev

MySQL根据列的最大值删除行

来自分类Dev

除2列外的重复数据行

来自分类Dev

如何删除重复数据的行(R)

来自分类Dev

根据第2列AWK / BASH中的最小值对两列文件进行重复数据删除

来自分类Dev

根据第2列AWK / BASH中的最小值对两列文件进行重复数据删除

来自分类Dev

R中的重复数据删除列对

来自分类Dev

两列重复数据删除

来自分类Dev

R中的重复数据删除列对

来自分类Dev

改进运行时以仅基于Python中的某些列对列表进行重复数据删除

来自分类Dev

按索引删除重复项,在重复项中保留每列的最大值

来自分类Dev

基于多列中的重复项合并、求和和取最大值

来自分类Dev

熊猫用于部分重复的行,保留行并用最小值或最大值替换数据

来自分类Dev

在重复项中选择值,在一列中没有最大值(Oracle)

来自分类Dev

有没有一种方法可以在oracle sql列中插入数据,其中生成的行基于给定的最小值和最大值

来自分类Dev

使用awk或sed删除基于列值的重复行

来自分类Dev

如何基于两列的值删除重复的行?

来自分类Dev

是否有任何将btrfs CoW用作重复数据删除的重复数据删除脚本?

Related 相关文章

  1. 1

    使用 PowerBI 基于两列的重复数据删除

  2. 2

    使用 PowerBI 基于两列的重复数据删除

  3. 3

    从整数中删除重复数字组中的一个重复数字以获取最大值

  4. 4

    根据列删除重复的行,同时保持下一列的最大值

  5. 5

    根据Pandas df中另一列中的最大值删除重复行

  6. 6

    从整个熊猫数据框中返回最大值,而不是基于列或行

  7. 7

    删除基于2列的重复值

  8. 8

    重复数据删除Oracle xmlagg列表

  9. 9

    按列(1、2)重复数据删除,但也按列(2,1)重复数据删除

  10. 10

    将数据集中的列从指定行中的最大值到最小值排序

  11. 11

    多索引数据框删除行,每组最大值

  12. 12

    多维数组值的重复数据删除

  13. 13

    MySQL根据列的最大值删除行

  14. 14

    除2列外的重复数据行

  15. 15

    如何删除重复数据的行(R)

  16. 16

    根据第2列AWK / BASH中的最小值对两列文件进行重复数据删除

  17. 17

    根据第2列AWK / BASH中的最小值对两列文件进行重复数据删除

  18. 18

    R中的重复数据删除列对

  19. 19

    两列重复数据删除

  20. 20

    R中的重复数据删除列对

  21. 21

    改进运行时以仅基于Python中的某些列对列表进行重复数据删除

  22. 22

    按索引删除重复项,在重复项中保留每列的最大值

  23. 23

    基于多列中的重复项合并、求和和取最大值

  24. 24

    熊猫用于部分重复的行,保留行并用最小值或最大值替换数据

  25. 25

    在重复项中选择值,在一列中没有最大值(Oracle)

  26. 26

    有没有一种方法可以在oracle sql列中插入数据,其中生成的行基于给定的最小值和最大值

  27. 27

    使用awk或sed删除基于列值的重复行

  28. 28

    如何基于两列的值删除重复的行?

  29. 29

    是否有任何将btrfs CoW用作重复数据删除的重复数据删除脚本?

热门标签

归档