SQL(BigQuery)-在整个时间内查找不寻常的值序列

SQL(BigQuery)-在整个时间内查找不寻常的值序列,sql,google-bigquery,Sql,Google Bigquery,我有一个ID列表,每个星期的每一天和每一天的每一小时都有美元值,这是从时间戳开始的,所以我只做了其中一周的dayOfWeek和hourOfDay Id | dayOfWeek | hourOfDay | dollars 1 1 1 0 1 1 2 0 1 1 3 0 1 1 4 0 1

我有一个ID列表,每个星期的每一天和每一天的每一小时都有美元值,这是从时间戳开始的,所以我只做了其中一周的dayOfWeek和hourOfDay

Id | dayOfWeek | hourOfDay | dollars 
1       1           1           0
1       1           2           0
1       1           3           0
1       1           4           0
1       1           5           6
1       1           6           5
1       1           7           7
1       1           8           18
1       1           9           13
1       1           10          19
1       1           11          18
1       1           12          13
1       1           13          19
1       1           14          10
1       1           15          16
1       1           16          15
1       1           17          17
1       1           18          18
1       1           19          13
1       1           20          0
1       1           21          0
1       1           22          0
1       1           23          0
1       2           1           0
1       2           2           0
1       2           3           0
1       2           4           0
1       2           5           16
1       2           6           15
1       2           7           27
1       2           8           11
1       2           9           13
1       2           10          11
1       2           11          18
1       2           12          14
1       2           13          14
1       2           14          10
1       2           15          16
1       2           16          15
1       2           17          17
1       2           18          18
1       2           19          13
1       2           20          10
1       2           21          22
1       2           22          0
1       2           23          0
我想找到在一天结束时连续出现高于平均值0的ID。我曾考虑使用类似于percent_rank的方法来查找高于平均水平的案例,但我很难将其与每个Id 0个案例的连续实例相结合


任何帮助都会得到真正的赞赏,但请让我知道如果我没有正确的想法,或者我应该考虑不同的方向。非常感谢。

下面是BigQuery标准SQL

标准SQL 以停电为例 选择 身份证件 MINdayOfWeek作为dayOfWeek, 明霍洛夫日作为霍洛夫日, COUNT1作为len 从…起 选择 id,seq, 第一个值dayOfWeek作为dayOfWeek, 第一个值hourOfDay超过hourOfDay 从…起 选择 id,星期一,星期一,美元, CountIf0美元超额付款,按id订单,按星期日、星期日及以下时间计算 从你的桌子上` 其中美元=0 按id划分的窗口win,按周、小时、日排序的顺序 按id分组,seq , 平均数为 选择id,AVGlen作为len 从停机 按id分组 选择o* 从中断到连接平均值 在o.id=a.id和o.len>a.len上 您可以使用问题中的虚拟数据测试/玩它,如下所示

标准SQL 以你的桌子为例 从UNNEST中选择*1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,6,1,1,6,1,1,1,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,6,1,1,6,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 0,0,1,2,1,0,1,2,2,0,1,2,3,0,1,2,4,0,1,2,5, 16,1, 2, 6, 15,1, 2, 7, 27,1, 2, 8, 11,1, 2, 9, 13,1, 2, 10, 11,1, 2, 11, 18,1, 2, 12, 14,1, 2, 13, 14,1, 2, 14, 10,1, 2, 15, 16,1, 2, 16, 15,1, 2, 17, 17,1, 2, 18, 18,1, 2, 19, 13,1, 2, 20, 10,1, 2, 21, 22,1, 2, 22, 0,1, 2, 23, 0] , 停电作为 选择 身份证件 MINdayOfWeek作为dayOfWeek, 明霍洛夫日作为霍洛夫日, COUNT1作为len 从…起 选择 id,seq, 第一个值dayOfWeek作为dayOfWeek, 第一个值hourOfDay超过hourOfDay 从…起 选择 id,星期一,星期一,美元, CountIf0美元超额付款,按id订单,按星期日、星期日及以下时间计算 从你的桌子上` 其中美元=0 按id划分的窗口win,按周、小时、日排序的顺序 按id分组,seq , 平均数为 选择id,AVGlen作为len 从停机 按id分组 选择o* 从中断到连接平均值 在o.id=a.id和o.len>a.len上 正如您在这里所看到的-中断子选择计算所有零序的序列长度和序列的开始以及下面的输出

id dayOfWeek hourOfDay len 1 1 1 4 1 1 20 9 1 2 22 2 最终选择仅输出中断中的行,其中相应的长度大于该id的平均子选择的平均长度

id dayOfWeek hourOfDay len 1 1 20 9
一天结束时的平均连续0是多少?顺便说一句,如果您可以编辑您的问题以显示您遇到问题的代码,那么我们可以尝试帮助您解决特定问题。您也可以阅读。例如,通常有1-2个连续0,例如,小时22,23=0,但我希望捕获类似于bove dayOfWeek=1,其中有4个连续的0小时20、21、22、23。我说得通吗?正式地说,现在说得通了。希望从商业角度来看这也有道理:oMaybe a在窗口操作后丢失了。只是想知道,BQ的文档中有没有讨论过这种窗口技术?我第一次看到它是aND真的很喜欢。而且很棒的回答BWTHY你@将考虑投票如果你喜欢它:O -我检查的东西,也将跟进链接窗口。ing@Will-你是对的-不知何故,我在为答案设置格式时丢失了。谢谢!现在正在查找链接…@Will-用于窗口检查和