Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找三个工作日的平均值(按小时细分)_Sql_Google Bigquery_Logic - Fatal编程技术网

Sql 查找三个工作日的平均值(按小时细分)

Sql 查找三个工作日的平均值(按小时细分),sql,google-bigquery,logic,Sql,Google Bigquery,Logic,我在Bigquery中有一个类似这样的始发地-目的地表,包括工作日、日期、UTC时间/小时和行程计数: Origin Destination Day Date Time Count NY Station Downtown Mon 02.09.2019 15 12 NY Station Downtown Mon 02.09.2019 16 10 City libry Eastside Mon 02.09.2019 17 10 NY

我在Bigquery中有一个类似这样的始发地-目的地表,包括工作日、日期、UTC时间/小时和行程计数:

  Origin  Destination   Day     Date    Time Count

NY Station  Downtown    Mon  02.09.2019  15  12
NY Station  Downtown    Mon  02.09.2019  16  10
City libry  Eastside    Mon  02.09.2019  17  10
NY Station  Downtown    Tue  03.09.2019  15  8
NY Station  Downtown    Tue  03.09.2019  16  5
City libry  Eastside    Tue  03.09.2019  17  5
NY Station  Downtown    Wed  04.09.2019  15  8
NY Station  Downtown    Wed  04.09.2019  16  10
City libry  Eastside    Wed  04.09.2019  17  11
我希望得到平均计数

  • 每个起点-终点对(纽约市中心车站和libry东侧城市车站)
  • 每个给定时间星期一到星期三的平均值
然后,输出应该类似于

Origin    Destination   Avg_Day  Period                    Time Avg_Count

NY Station  Downtown    Mon-Wed  Week1 (02.09.19-04.09.19)  15  9,33
NY Station  Downtown    Mon-Wed  Week1 (02.09.19-04.09.19)  16  8,33
City libry  Eastside    Mon-Wed  Week1 (02.09.19-04.09.19)  17  8,67
忽略Avg_day和Period列,因为它只是为了帮助/显示我希望达到的平均天数和日期。换言之,目的是了解正常工作日(在本例中定义为周一至周三)在一天中特定时间的每个始发地-目的地对的平均计数。例如,纽约市中心车站对的时间15的平均计数为9,33,计算方法是取周一、周二和周三15点的计数平均值(即12、8和8的平均值)


我尝试过CASE和WHERE-SQL查询的变体,但还没有掌握如何对此进行查询的逻辑,因此发布任何查询都没有意义。可能还必须创建一个临时表。有人能帮我吗?非常感谢

下面是BigQuery标准SQL

#standardSQL
select
  Origin, 
  Destination, 
  'Mon-Wed' AS Avg_Day,
  FORMAT('Week%i (%s-%s)', week, min_date, max_date) AS Period,
  Time,
  Avg_Count
from (
  SELECT 
    Origin, 
    Destination, 
    'Mon-Wed' AS Avg_Day,
    EXTRACT(WEEK FROM PARSE_DATE('%d.%m.%Y', date)) week, 
    MIN(date) AS min_date, 
    MAX(date) AS max_date,
    Time,
    ROUND(AVG(count), 2) AS Avg_Count
  FROM `project.dataset.table`
  WHERE day IN ('Mon', 'Tue', 'Wed')
  GROUP BY Origin, Destination, Time, week 
)   
如果要应用于问题中的样本数据,则输出为

Row Origin      Destination Avg_Day Period                          Time    Avg_Count    
1   NY Station  Downtown    Mon-Wed Week35 (02.09.2019-04.09.2019)  15      9.33     
2   NY Station  Downtown    Mon-Wed Week35 (02.09.2019-04.09.2019)  16      8.33     
3   City libry  Eastside    Mon-Wed Week35 (02.09.2019-04.09.2019)  17      8.67    

这看起来像一个简单的聚合查询。你有什么问题?