【发布时间】: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