我正在处理涉及以下字段的查询:
id
date
revenue
还涉及其他内容,但就此而言,这些是您需要知道的唯一三个。
所以基本上,这些字段的标准语句如下:
SELCT
id,
date_trunc('month', date) AS month,
SUM(revenue) AS total_rev
FROM
sample.table
假设我有一个日期,其中发生的更改影响了选择ID的性能,我想创建两个存储桶:更改前一个月的收入和进行更改的月份中的收入。
但这是另一个警告。此更改应用于某些ID的日期各不相同。对于一些人来说可能是2017年6月,而另一个人则是2017年11月。所以这给我带来了一些麻烦。但有用的是,我已经知道了这个附属的一小部分ID。所以我可以输入像
这样的WHERE语句WHERE id IN ('12345', '67891', '11121')
我在BigQuery方面有很多经验但在Redshift方面经验不多,所以我可以使用一些帮助!
答案 0 :(得分:0)
你可以:
像这样:
create table change_log (id integer, date date);
insert into change_log values (1,'2017-11-01'),(2,'2017-12-01');
select
id,
sum(case when date_trunc('month',r.date)=date_trunc('month',c.date) then revenue end) as revenue_change_month,
sum(case when date_trunc('month',r.date)<date_trunc('month',c.date) then revenue end) as revenue_prior_month
from revenue_table r
join change_log c
on r.id=c.id
and date_trunc('month',r.date) between dateadd(month,-1,date_trunc('month',c.date)) and date_trunc('month',c.date)
group by 1
这样,如果我理解正确的问题,那么它在日历中的实际月份并不重要,但它是每个用户的变化月和前一个月
有一点需要注意的是,如果在月末进行更改,则会对月份的月度数字产生一些影响。您可以将此更改为使用更改前30天和更改后30天,这可能会更好,具体取决于您的业务的结算模式。