在 BigQuery 中获取每天的最大数据

Get max data for every day in BigQuery

我有一个 table 按小时显示每日数据。我想得到一个每天只有一行的 table。该行应具有 AforoTotal 列的最大值。

这是table的一部分,包含三天的记录。

FechaHora Fecha Hora AforoTotal
2022-01-13T16:00:00Z 2022-01-13 16:00:00 4532
2022-01-13T15:00:00Z 2022-01-13 15:00:00 4419
2022-01-13T14:00:00Z 2022-01-13 14:00:00 4181
2022-01-13T13:00:00Z 2022-01-13 13:00:00 3914
2022-01-13T12:00:00Z 2022-01-13 12:00:00 3694
2022-01-13T11:00:00Z 2022-01-13 11:00:00 3268
2022-01-13T10:00:00Z 2022-01-13 10:00:00 2869
2022-01-13T09:00:00Z 2022-01-13 09:00:00 2065
2022-01-13T08:00:00Z 2022-01-13 08:00:00 1308
2022-01-13T07:00:00Z 2022-01-13 07:00:00 730
2022-01-13T06:00:00Z 2022-01-13 06:00:00 251
2022-01-13T05:00:00Z 2022-01-13 05:00:00 95
2022-01-13T04:00:00Z 2022-01-13 04:00:00 44
2022-01-13T03:00:00Z 2022-01-13 03:00:00 35
2022-01-13T02:00:00Z 2022-01-13 02:00:00 28
2022-01-13T01:00:00Z 2022-01-13 01:00:00 6
2022-01-13T00:00:00Z 2022-01-13 00:00:00 -18
2022-01-12T23:00:00Z 2022-01-12 23:00:00 1800
2022-01-12T22:00:00Z 2022-01-12 22:00:00 2042
2022-01-12T21:00:00Z 2022-01-12 21:00:00 2358
2022-01-12T20:00:00Z 2022-01-12 20:00:00 2827
2022-01-12T19:00:00Z 2022-01-12 19:00:00 3681
2022-01-12T18:00:00Z 2022-01-12 18:00:00 4306
2022-01-12T17:00:00Z 2022-01-12 17:00:00 4377
2022-01-12T16:00:00Z 2022-01-12 16:00:00 4428
2022-01-12T15:00:00Z 2022-01-12 15:00:00 4424
2022-01-12T14:00:00Z 2022-01-12 14:00:00 4010
2022-01-12T13:00:00Z 2022-01-12 13:00:00 3826
2022-01-12T12:00:00Z 2022-01-12 12:00:00 3582
2022-01-12T11:00:00Z 2022-01-12 11:00:00 3323
2022-01-12T10:00:00Z 2022-01-12 10:00:00 2805
2022-01-12T09:00:00Z 2022-01-12 09:00:00 2159
2022-01-12T08:00:00Z 2022-01-12 08:00:00 1378
2022-01-12T07:00:00Z 2022-01-12 07:00:00 790
2022-01-12T06:00:00Z 2022-01-12 06:00:00 317
2022-01-12T05:00:00Z 2022-01-12 05:00:00 160
2022-01-12T04:00:00Z 2022-01-12 04:00:00 106
2022-01-12T03:00:00Z 2022-01-12 03:00:00 95
2022-01-12T02:00:00Z 2022-01-12 02:00:00 86
2022-01-12T01:00:00Z 2022-01-12 01:00:00 39
2022-01-12T00:00:00Z 2022-01-12 00:00:00 0
2022-01-11T23:00:00Z 2022-01-11 23:00:00 2032
2022-01-11T22:00:00Z 2022-01-11 22:00:00 2109
2022-01-11T21:00:00Z 2022-01-11 21:00:00 2362
2022-01-11T20:00:00Z 2022-01-11 20:00:00 2866
2022-01-11T19:00:00Z 2022-01-11 19:00:00 3948
2022-01-11T18:00:00Z 2022-01-11 18:00:00 4532
2022-01-11T17:00:00Z 2022-01-11 17:00:00 4590
2022-01-11T16:00:00Z 2022-01-11 16:00:00 4821
2022-01-11T15:00:00Z 2022-01-11 15:00:00 4770
2022-01-11T14:00:00Z 2022-01-11 14:00:00 4405
2022-01-11T13:00:00Z 2022-01-11 13:00:00 4040
2022-01-11T12:00:00Z 2022-01-11 12:00:00 3847
2022-01-11T11:00:00Z 2022-01-11 11:00:00 3414
2022-01-11T10:00:00Z 2022-01-11 10:00:00 2940
2022-01-11T09:00:00Z 2022-01-11 09:00:00 2105
2022-01-11T08:00:00Z 2022-01-11 08:00:00 1353
2022-01-11T07:00:00Z 2022-01-11 07:00:00 739
2022-01-11T06:00:00Z 2022-01-11 06:00:00 248
2022-01-11T05:00:00Z 2022-01-11 05:00:00 91
2022-01-11T04:00:00Z 2022-01-11 04:00:00 63
2022-01-11T03:00:00Z 2022-01-11 03:00:00 46
2022-01-11T02:00:00Z 2022-01-11 02:00:00 42
2022-01-11T01:00:00Z 2022-01-11 01:00:00 18
2022-01-11T00:00:00Z 2022-01-11 00:00:00 5

我的预期结果是:

FechaHora Fecha Hora AforoTotal
2022-01-13T16:00:00Z 2022-01-13 16:00:00 4532
2022-01-12T16:00:00Z 2022-01-12 16:00:00 4428
2022-01-11T17:00:00Z 2022-01-11 17:00:00 4590

考虑以下方法

select as value 
  array_agg(t order by AforoTotal desc limit 1)[offset(0)]
from your_table t
group by Fecha            

如果应用于您问题中的示例数据 - 输出为

另一种方式有点贵:

当 (Fetcha 和 max(AforoTotal)) 组合是唯一的时,它将起作用。

在给定的示例中,我发现它是独一无二的。

SELECT * FROM your_table
WHERE Fecha||AforoTotal 
IN 
(SELECT Fecha||MAX( AforoTotal ) FROM your_table GROUP BY Fecha);


[Output]


  https://i.stack.imgur.com/IFzWA.jpg

感谢您的方法。这可以在 BigQuery 中保存为视图,我可以在 DataStudio 中使用它。我还没有测试组合不唯一时会发生什么,我会看看它的表现。