选择在特定时间窗口中具有所有空值的记录

时间:2015-06-29 15:40:59

标签: sql oracle

我有这张桌子:

CODE | INSTANT | VAL

在时间窗口内,基于INSTANT列值,VAL可以为null或不为null。 所以你可以这样:

'A',2015-06-29 08:00:01,null
'A',2015-06-29 08:30:01,5
'A',2015-06-29 09:00:00,null
'B',2015-06-29 08:00:01,null
'B',2015-06-29 08:30:01,null
'B',2015-06-29 09:00:00,null

现在,给定时间窗口:

2015-06-29 08:00:00 <--> 2015-06-29 09:00:00

我想在该时间窗口中获取 ALL null的记录代码。在这个例子中,答案只是“B”,因为代码“A”的记录至少有一个条目5,它在指定的时间窗口中不为空。

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望所有NULL的代码都包含在特定值范围内的记录。如果是这样,那么您可以使用聚合和having子句,如下所示:

select t.code
from table t
where t.instant >= WINDOW_START and
      t.instant <= WINDOW_END
group by t.code
having max(val) is null;

等效having子句是:

having count(val) = 0

答案 1 :(得分:0)

对于给定日期范围内没有VAL的每个代码,这应该只给你一条记录

SELECT DISTINCT
    CODE
FROM
    table1 t1
WHERE
    NOT EXISTS ( SELECT
                    1
                 FROM
                    table1 t2
                 WHERE
                    t1.CODE = t2.CODE               
                    AND t2.VAL IS NOT NULL
                    AND INSTANT BETWEEN '2015-06-29 09:00:00'
                                AND     '2015-06-29 09:00:00' )
相关问题