答案 0 :(得分:2)
您只需使用group by
和条件表达式:
select id,
(case when count(ActiveMonthYear) >= 5 then 'YES!' else 'NAW' end)
from table t
where ListOfTheMonths between '201301' and '201312'
group by id;
编辑:
我认为“持续”并不仅仅意味着任何五个月。为此,有各种方式。我喜欢行号方法的区别
select distinct id
from (select t.*,
(row_number() over (partition by id order by ListOfTheMonths) -
count(ActiveMonthYear) over (partition by id order by ListOfTheMonths)
) as grp
from table t
where ListOfTheMonths between '201301' and '201312'
) t
where ActiveMonthYear is not null
group by id, grp
having count(*) >= 5;
对于连续活动月份的组,子查询的差异是不变的。然后将其用于分组。结果是符合此条件的所有ID的列表。您可以为特定ID添加where
(在子查询中执行此操作)。
顺便说一句,这是使用select distinct
和group by
编写的。这是两种适当一起使用的罕见情况之一。单个id
可以在同一年有两个为期五个月的期间。没有理由在结果集中包含该人两次。