找到日期值为null的所有id

时间:2017-02-16 00:23:07

标签: mysql

我正在尝试获取UserID的列表,其中每个条目的EndDate都为NULL例如

Userid | EndDate
123    | NULL
123    | NULL
124    | 2016-01-01
124    | NULL
123    | NULL
123    | NULL
125    | 2016-01-01
126    | NULL

所以我只想返回123和126。

似乎有一种简单的方法可以做到这一点,但我没想出来。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

select Userid 
from sometable
group by Userid
having count(EndDate) = 0

http://rextester.com/QJSWV55265

如果count(EndDate)仅存在NULL值,

0将返回Userid

如果您有一个users表和正确的索引,那么可能会更快:

select Userid
from users u
where not exists (
    select *
    from sometable t
    where t.Userid = u.Userid
    and t.EndDate is not null
)

更新当所有条目不为空时,相反的查询(获取Userid)将是:

select Userid 
from sometable
group by Userid
having count(EndDate) = count(Userid)

http://rextester.com/FUKPLP59441

答案 1 :(得分:0)

您可以获取具有非空结束日期的所有用户ID的列表,然后使用NOT IN将其排除。

SELECT DISTINCT userid
FROM yourTable
WHERE userid NOT IN (
    SELECT userid
    FROM yourTable
    WHERE EndDate IS NOT NULL)

答案 2 :(得分:0)

使用NOT EXISTS和子查询执行此操作:

select distinct
    `userid`
from yourtable t1
where not exists (
  select 1 
  from yourtable t2 
  where t1.userid = t2.userid 
  and t2.enddate is not null
)

demo在这里。