首页 > 解决方案 > INNER JOIN 并使用 GROUP BY 来防止重复结果?

问题描述

我需要加入 CTE 和另一个表temp.holder(我看到很多都是重复的。

以下是我的查询:

with data as (....)
select cola, date_part(week, trunc(CONVERT_TIMEZONE('UTC', 'PST8PDT', starttimestamp)) + 6) as colb, colc, cold, cole, colf, colg, colh, coli, count(*) as process_type
from data join
     temp.holder x
     on data.cola = x.cola
where colj NOT IN ('ABC', 'DEF', 'GHI')
AND colb = extract(week from current_date) + 1
group by data.cola, starttimestamp, colc, cold, cole, data.colf, colg, colh, coli
order by data.cola;

但是当我运行这个查询时,我看不到任何重复项。

with data as (....)
selec * from data;

我的第一个查询有什么问题吗?

另外我应该如何继续调试我的第一个查询中的问题?到目前为止,我将查询的输出转储到 csv 文件中,然后使用我的 python 脚本来确定是否有任何重复的行。

我正在尝试将其转换为:

ColA    ColB    ColC    ColD    ColE    COLF    COLG    COLH    COLI    COLJ
-----------------------------------------------------------------------------
a1      b1      c1      d1      e1      f1      g1      h1      i1      PART
a1      b1      c1      d1      e1      f1      g1      h1      i1      TYPE

进入这个:

ColA    ColB    ColC    ColD    ColE    COLF    COLG    COLH    COLI    process_type
-------------------------------------------------------------------------------------
a1      b1      c1      d1      e1      f1      g1      h1      i1      2

注意:我正在处理 80k+ 行。列也是starttimestamp没有时区列的时间戳。

标签: sqlamazon-redshift

解决方案


问题是你的group by. 您正在对原始时间列进行分组,而不是在select. 所以试试这个:

group by data.cola, colb, colc, cold, cole, data.colf, colg, colh, coli

推荐阅读