如何计算Redshift中给定ID的具有相同字段值的行数?
例如,我想计算每个ID的状态天数。表Current_State有三列(日期,ID,状态),我想添加计算列Days-in-state。如何计算Redshift中给定ID的具有相同字段值的行数?
Date, ID, State, Days-in-state 1/1/2017, 123, A, 1 1/2/2017, 123, A, 2 1/3/2017, 123, A, 3 1/4/2017, 123, B, 1 1/5/2017, 123, B, 2 1/1/2017, 345, A, 1 1/2/2017, 345, B, 1 1/3/2017, 345, B, 2 1/4/2017, 345, B, 3 1/5/2017, 345, C, 1
我读了一篇文章,说窗口函数可以工作,但不是很清楚,也没有ID要求。谢谢你的帮助。
如果美国不回来像ABA,只有农行,该解决方案是这样的:
select
date
,id
,state
,row_number() over (partition by id, state order by date) as days_in_state
from your_table
order by id,date
你可以告诉窗口函数来看看行的一些群体单独使用partition
,你的情况你有ID /状态分区。如果状态可以像A一样变回,那么B又变回A,这有点复杂,需要另一个查询。
谢谢AlexYes。状态将从A到B并返回到A,但是当它返回时(A从B),我想要开始状态结束的天数。 –
这是你想要的吗?
select id,
sum(case when state = 'A' then days_in_state else 0 end) as state_a,
sum(case when state = 'B' then days_in_state else 0 end) as state_b,
sum(case when state = 'C' then days_in_state else 0 end) as state_c
from t
group by id;
你的数据表明,你可能想max()
而非sum()
。
不,days_in_state字段是我尝试创建的计算字段。我的不好之处并没有在问题中说清楚,而问题已更新得更加精确。 –
您的Days-in-state专栏似乎没有很多信息。我无视它。
我假设你有日期,编号,状态(化合物)唯一索引。然后所需的查询是:
select count(*) as num_days, id, state
from whatever_you_named_your_table
group by id, state;
编辑您的问题,并显示您想要的结果。 –