如何在redshift中动态提取过去x周的数据?

问题描述

我有一个下面的查询,该查询向我提供上周的单次计数Week 43。截至目前,本周为44。

select
count(distinct(clientid))
from data_holder
left join name
on name.client_id = data_holder.clientid
where POC NOT IN ('SGH','IKU')
and status IN ('NOTTAKEN')
and (from <= '43' AND to >= '44')

到目前为止,我看到的输出是第43周的输出

Count
-----
124 

现在,我正在尝试使此查询动态化,以便可以让我在过去6周内进行如下计数:

Count   Week
------------
124     W43
125     W42
126     W41
127     W40
128     W39
129     W38

我能够以动态方式转换上述查询,这给了我前一周的计数为43,它可以正常工作,但是我不确定如何更改它,以便可以为我提供过去6周的所有数据上面的输出格式。

select
count(distinct(clientid))
from data_holder
left join name
on name.client_id = data_holder.clientid
where POC NOT IN ('SGH','IKU')
and status IN ('NOTTAKEN')
and (from <= DATE_PART(w,CURRENT_DATE) -1 AND to >= DATE_PART(w,CURRENT_DATE))

更新

我在查询下面运行,但没有看到来自查询下面的任何数据-

with data_holder as
    (
    with tree_post as
    (Select contractid as conid,max(goldennmber) as goldennmber
    from zeus.user_keys_post group by contractid)
    Select * from tree_post join zeus.user_keys_post b
    on tree_post.conid = b.contractid and tree_post.goldennmber = b.goldennmber
    ),name as 
    (
    SELECT abc,client_id,services from dim.crom c1 where c1.ver = (SELECT MAX(ver) from dim.crom c2 
    where c1.client_id = c2.client_id)
    )
     
    select from,count(distinct(clientid))
    from data_holder
    left join name
    on name.client_id = data_holder.clientid
    where POC NOT IN ('SGH','IKU')
    and status IN ('NOTTAKEN')
    and from <= date_part(w,current_date - interval '6 weeks') 
    and to   >= date_part(w,current_date)
    group by from

解决方法

这是您想要的吗?

df <- structure(list(mes = c("01/01/2000","01/02/2000","01/03/2000","01/04/2000","01/05/2000","01/06/2000","01/07/2000","01/08/2000","01/09/2000","01/10/2000","01/11/2000","01/12/2000"),work_location = c("China","Mexico","China","USA","Japan","India"),birth_place = c("Chile","Chile","Argentina","Poland","Finland","Norway","Kenia","Mali","Mali")),class = "data.frame",row.names = c(NA,-12L))

然后,如果要每个AND "from" <= DATE_PART(w,CURRENT_DATE - INTERVAL '6 weeks') AND "to" >= DATE_PART(w,CURRENT_DATE)) 排一行,则可以使用from。所以:

group by

请注意,我修改了查询以使用表别名。我还建议给每列加上它所属的表的前缀,因此查询对于底层数据结构是明确的:我没有任何线索,所以我使用了select ??.from,count(distinct ??.clientid) cnt from data_holder dh left join name n on on n.client_id = dh.clientid where ??.poc not in ('SGH','IKU') and ??.status = 'NOTTAKEN' and ??.from <= date_part(w,current_date - interval '6 weeks') and ??.to >= date_part(w,current_date) group by ??.from ,您需要用{{1}替换它}或??

我对dh也非常怀疑。是否有充分的理由为什么您实际上并不想要n呢?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...