我有这个查询
select count(distinct mac)
from t out
where radar_id = '32'
and log_time >= '2018-08-18 00:00:00'
and log_time < '2018-08-22 23:59:59'
and mac not in
(select mac from t as inn where out.log_time - interval '2 minutes' > inn.log_time);
我将其重写为
select count(distinct mac)
from `test-from-frelance.123.sniffer_logs` out
where radar_id = '32'
and log_time >= '2018-08-18 00:00:00'
and log_time < '2018-08-22 23:59:59'
and mac not in
(select mac
from `test-from-frelance.123.sniffer_logs` as inn
where TIMESTAMP_SUB(out.log_time, interval 2 minute) > inn.log_time );
但是我得到了错误:
如果没有连接两侧的字段相等的条件,则不能使用LEFT OUTER JOIN。
我不明白我在哪里错。如何解决这个问题?
从桌子上需要得到什么?需要获取从'2018-08-18 00:00:00'到'2018-08-22 23:59:59'以来向db发送信息的mac机不同设备(设备发送信息时,log_time列包含信息)并且不包括设备以大于2分钟的间隔发送信息。
答案 0 :(得分:3)
下面是BigQuery标准SQL的简单示例
#standardSQL
SELECT COUNT(1) devices FROM (
SELECT mac FROM (
SELECT mac,
TIMESTAMP_DIFF(log_time, LAG(log_time) OVER(PARTITION BY mac ORDER BY log_time), MINUTE) delta
FROM `test-from-frelance.123.sniffer_logs` out
WHERE radar_id = '32'
AND log_time >= '2018-08-18 00:00:00'
AND log_time < '2018-08-22 23:59:59'
)
GROUP BY mac
HAVING MIN(delta) > 2
)
在这里,首先我们计算给定mac的连续条目之间的距离/间隔,然后过滤掉那些至少少于/等于2分钟的条目/间隔,最后算出“幸存”的mac
您可以根据具体情况调整逻辑以适应您的需求