【问题标题】:How can I removes duplicates by using MAX and SUM per group identifier?如何使用每个组标识符的 MAX 和 SUM 删除重复项?
【发布时间】:2021-05-13 12:45:40
【问题描述】:

我正在使用 SQL 创建一个未结订单报告以从 AWS Redshift 查询数据。

我当前的表有重复项(相同的顺序、ln 和 subln 编号

Order Ln SubLn Qty ShpDt
4166 010 00 3 2021-01-06
4166 010 00 3 2021-01-09
4167 011 00 9 2021-02-01
4167 011 00 9 2021-01-28
4167 011 01 8 2020-12-29

我需要使用 order、ln 和 subln 列作为组标识符来删除重复项。我想计算数量的总和并保留订单的最近发货日期以实现此结果:

Order Ln SubLn TotQty Shipped
4166 010 00 6 2021-01-09
4167 011 00 18 2021-02-01
4167 011 01 8 2020-12-29

阅读后(How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?)我尝试了下面的代码,它只聚合了字段,并没有删除重复项。我错过了什么?

FROM table1 AS t1
JOIN (SELECT t1.order, t1.ln, t1.subln, SUM(qty) AS totqty, MAX(shpdt) AS shipped
      FROM table1 AS t1
      GROUP BY order, ln, subln) as t2
ON tb1.order = tb2.order AND tb1.ln = tb2.ln AND tb1.subln = tb2.subln

     

【问题讨论】:

  • 我在您的结果中没有看到重复的行。 (只有一些部分重复值.. 例如 Ln 11 或 .SubLn 00)你对重复的真正含义是什么??
  • 我也看不到任何重复的 - 所有结果行都有不同的 subln。你的意思是 GROUP BY subln 吗?您的意思是从 table1 中选择它并将其包含在您的联接中吗?
  • 当然你得到了重复。您的派生表进行分组和求和,那里不应该有欺骗性。然后将其加入到具有重复项的原始表中。
  • 报告包含订单号,订单号由订单、行和子行组成。原表中,订单4166第10行重复,订单4167第11行重复。
  • @Andrew 你有什么建议?在阅读了其他关于每个组最大 n 的帖子后,我尝试了这种方法。我是 sql 新手,非常感谢您的帮助

标签: sql amazon-redshift aggregate-functions greatest-n-per-group groupwise-maximum


【解决方案1】:

我需要使用 order、ln 和 subln 列删除重复项 组标识符。我想计算数量的总和并保持最新 实现此结果的订单发货日期:

根据查询产生的数据集,数据集在这 3 列上是唯一的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 2020-05-16
    • 1970-01-01
    • 2016-05-28
    • 2015-01-02
    • 2022-12-18
    • 2013-08-06
    • 1970-01-01
    相关资源
    最近更新 更多