用于查找记录的SQL查询

时间:2015-08-10 07:30:08

标签: sql

我有一张名为PAYMENT的桌子。在此表中,我有一个用户ID,一个帐号,一个邮政编码和一个日期。我想找到所有已激活且已停用的用户的所有记录,然后再次激活为Count。

这就是表格的样子:

| 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

我不知道这可能吗?

1 个答案:

答案 0 :(得分:0)

要查找处于活动状态和非活动状态的用户,您可以按用户ID进行分组。 (您自己的方法where register = 'active' and register = '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;