2015-08-10 5 views
-1

У меня есть таблица с именем PAYMENT. Внутри этой таблицы у меня есть идентификатор пользователя, номер учетной записи, почтовый индекс и дата. Я хотел бы найти все записи для всех пользователей, которые активны и деактивированы, а затем снова активны как Count.SQL-запрос для поиска записей

Это как таблица выглядит следующим образом:

| user_id | account_no | zip |  date | register | 
|  1 |  123 | 55555 | 12-DEC-09 | active | 
|  1 |  123 | 55555 | 13-DEC-09 | disactive | 
|  1 |  123 | 55555 | 14-DEC-09 | active | 
|  2 |  456 | 55555 | 14-DEC-09 | disactive | 
|  3 |  789 | 55555 | 14-DEC-09 | disactive | 
|  4 |  999 | 55555 | 14-DEC-09 | active | 

Результат должен выглядеть примерно так:

Я использую COUNT (user_id), так что результат будет только наш, как

= 1

Я не знаю, возможно ли это?

+0

где ваш запрос –

+2

Вы, кажется, не знаете, какой механизм базы данных вы используете. Это не очень хороший сигнал ... –

+0

Вы объясните не точное. Вы ищете количество пользователей, которые были активны и неактивны уже и чье последнее состояние «активно»? –

ответ

0

Чтобы найти пользователей, которые были активны и неактивны, вы будете группировать по ID пользователя. (Ваш собственный подход where register = 'active' and register = 'disactive' не может работать, потому что регистр в одной записи может быть только или «активный» или «disactive» Вы должны смотреть на группу записей, а..)

select user_id 
from mytable 
group by user_id 
having count(case when register = 'active' then 1 end) > 0 
and count(case when register = 'disactive' then 1 end) > 0; 

Затем посчитайте:

select count(*) 
from 
(
    select user_id 
    from mytable 
    group by user_id 
    having count(case when register = 'active' then 1 end) > 0 
    and count(case when register = 'disactive' then 1 end) > 0 
) users; 
+0

Спасибо! теперь я понимаю логику. – JohhnyNewbie