我有一个包含产品名称,订单号和下订单时间的数据集。
prod_name,order_no,order_time
a,101,2018-05-01
a,102,2018-06-04
a,103,2018-05-03
b,104,2018-01-21
b,105,2018-01-11
我正在尝试构建一个报告,该报告显示自一阶订单以来的时间(与当前时间相比),其输出如下:
prod_name,time_since_first_sale,aging
a,64,Less than 3 months back
b,177,Less than 6 months back
以下是我正在使用的SQL:
select DISTINCT b.prod_name,case when((CURRENT_TIMESTAMP - min(a.order_time))) < '90' THEN 'Less than 3 months'
when ((CURRENT_TIMESTAMP - min(order_time))) < '180' THEN 'Less than 6 months'
else 'Other' end as aging
from sales a, prod b where a.id=b.prod_id;
上面的SQL在执行时返回重复项,相信它还会考虑sales表中的每个sale_id。我如何修改上面的查询,以便每个prod_name仅获得一条记录。但是,如果我删除案例声明,则重复项不存在。关于我在做错什么的任何人都可以提供帮助,以获取这些副本。
我正在使用Amazon Redshift DB。
谢谢..
答案 0 :(得分:1)
从不在FROM
子句中使用逗号。 总是使用正确的,明确的,标准 JOIN
语法。
打算使用SELECT DISTINCT
时不要使用GROUP BY
。
因此您的查询应如下所示:
select p.prod_name,
(case when CURRENT_TIMESTAMP - min(s.order_time) < '90'
then 'Less than 3 months'
when CURRENT_TIMESTAMP - min(s.order_time) < '180' then 'Less than 6 months'
else 'Other'
end) as aging
from sales s join
prod p
on s.id = p.prod_id
group by p.prod_name;
请注意,我还添加了合理的表别名(表名称的缩写)和合格的 all 列引用。