2015-08-14 4 views
1

Я пытаюсь найти, постоянно ли человек (id = A3) постоянно участвует в программе не менее пяти месяцев или более в конкретном году (2013 год). Любое предложение будет оценено по достоинству. Мои данные выглядят следующим образом:Как подсчитать строки в SQL Server 2012?

enter image description here

+0

Как ваши данные выглядят? вы забыли добавить это в вопрос? –

+1

Что вы подразумеваете под непрерывностью? –

+0

Привет, Гордон, постоянное значение без месячного разрыва в течение как минимум пяти месяцев. – poshan

ответ

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; 

EDIT:

Я полагаю, "непрерывно" не просто означает любой пять месяцы. Для этого существуют разные способы. Я хотел разность номеров строк подходить

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; 

Разница в подзапросе постоянна для групп последовательных активных месяцев. Затем используется группировка. Результатом является список всех идентификаторов, соответствующих этим критериям. Вы можете добавить where для определенного идентификатора (сделать это в подзапросе).

Кстати, это написано с использованием select distinct и group by. Это один из редких случаев, когда эти два используются вместе. У одного id может быть два периода в пять месяцев в том же году. Нет причин включать этого человека дважды в результирующий набор.

+1

@ Гордон .. порядок здесь не важен? –

+0

Возможно, это правильный ответ. Однако я подумал. Возможно, пользователю необходимо войти в систему на 5 месяцев? –

+0

@vkp. , , Я неправильно понял проблему, когда я впервые ответил на это. –

Смежные вопросы