问题描述
我有一个下面的查询,该查询向我提供上周的单次计数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
呢?