获取所有项目没有开放结束日期

时间:2015-08-19 12:06:23

标签: mysql sql

我需要使用(My)SQL解决以下问题,给出的是此示例表:

id | item | start      | end
1  | 100  | 2015-01-01 | 2015-01-14
2  | 100  | 2015-01-01 | NULL
3  | 101  | 2015-03-01 | 2015-04-15
4  | 101  | 2015-04-17 | 2015-04-22
5  | 101  | 2015-04-27 | 2015-05-11

我需要一个查询,它会向我提供没有开放结束日期的所有项目。因此,从上面我可以得到101。

我尝试使用GROUP和一些子选择,但没有像我预期的那样出现。对此有何帮助?

1 个答案:

答案 0 :(得分:2)

您可以使用group byhaving

执行此操作
select item
from example
group by item
having count(end) = count(*);
带有列名的

count()计算非NULL值的数量。如果这等于行数,则没有值为NULL

你也可以使用:

having sum(end is null) = 0

编辑:

我应该补充一点,假设您有正确的索引和项目表,以下内容可能会更快:

select i.item
from items i
where not exists (select 1
                  from example e
                  where i.item = e.item and e.end is null
                 );

为了提高性能,您需要example(item, end)上的索引。