我有这张桌子:
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,它在指定的时间窗口中不为空。
答案 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' )