我有以下表格,其中我需要将type = D
计为 1 ,但如果该ID以R结尾,那么它应计为 0 。
ID 123始终以D开头,然后它可以是R,然后可以是D或A.
ID Decision Dt Type/Status
123 1/15/2014 D
123 1/20/2014 A
123 1/15/2014 R
我已将SQL编写为sum(if(type=d)then 1 else 0 end)
。我得到正确的计数,直到type/status
是R.这是DB中唯一的ID,以状态R结束而不是移动到D.我需要帮助编写sql。
感谢您的帮助。
答案 0 :(得分:0)
您对所有类型为D和R的记录感兴趣。您还需要以某种方式标记最后一条记录。这可以通过RANK完成。每个ID的最新条目排名第1。
然后按ID进行分组,查看该ID是否存在类型为R的最后一条记录。如果是,则结果为0,否则计数类型D.
select
id,
case when max(case when last_is_one = 1 and type = 'R' then 1 end) = 1 then
0
else
count(case when type = 'D' then 1 end)
end as d_count
from
(
select
id,
type,
rank() over (partition by id order by decision_dt desc) as last_is_one
from mytable
where type in ('D','R')
) d_and_r
group by id;