SQL BigQuery:选择具有时间基础的查询

问题描述 投票:0回答:2

我被要求在时间基础上找到数据库中用户的位置。我想在上午7:00到10:00和下午4:00到10:00之间的特定时间选择3月份的所有预订活动详情。

大查询将timestamp列作为event_timestamp。这样我们就可以在3月份的上午7:00到10:00和下午4:00到10:00之间收到所有预订事件。

如何使用event_timestamp获取特定时间的数据。

  SELECT
  x.value.string_value AS lat,
  y.value.string_value AS lon, EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp)) as t,
  geo.city
FROM
  `apps.analytics_185684181.*`,
  UNNEST(user_properties) AS x,
  UNNEST(user_properties) AS y
WHERE
  x.key="user_loc_lat"
  AND y.key="user_loc_lon"
  AND event_name='reservation'
  AND (_TABLE_SUFFIX BETWEEN 'events_20190301'
    AND 'events_20190331')

谁有人知道如何这样做?

非常感谢 !

sql firebase google-bigquery firebase-analytics
2个回答
1
投票

为什么我不能在WHERE子句中使用“小时”

因为在执行SELECT之前会评估WHERE子句,所以在评估WHERE时,hour尚不可用。如果你想简化你的查询并使用hour - 你可以先在内部SELECT中引入hour字段,然后在外部SELECT中使用hour,如下例所示

#standardSQL
SELECT lat, lon, hour FROM (
SELECT
  x.value.string_value AS lat,
  y.value.string_value AS lon, 
  EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp)) AS hour
FROM `apps.analytics_185684181.*`,
  UNNEST(user_properties) AS x,
  UNNEST(user_properties) AS y
WHERE x.key="user_loc_lat"
  AND y.key="user_loc_lon"
  AND event_name='reservation'
  AND (_TABLE_SUFFIX BETWEEN 'events_20190301' AND 'events_20190331')
)
WHERE hour BETWEEN 7 AND 9 
OR hour BETWEEN 16 AND 21  

0
投票

我使用带有HOUR部分的EXTRACT Date功能得到了结果。它将以24小时数字(0-23)返回事件时间戳小时。

EXTRACT(part FROM date_expression)

SELECT
  x.value.string_value AS lat,
  y.value.string_value AS lon, EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp)) AS hour
FROM
  `apps.analytics_185684181.*`,
  UNNEST(user_properties) AS x,
  UNNEST(user_properties) AS y
WHERE EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp))>=7 
AND EXTRACT(HOUR FROM TIMESTAMP_MICROS(event_timestamp))<=9 AND 
  x.key="user_loc_lat"
  AND y.key="user_loc_lon"
  AND event_name='reservation'
  AND (_TABLE_SUFFIX BETWEEN 'events_20190301'
    AND 'events_20190331')

但是我不能使用列名称小时和where子句一样

enter image description here

哪个投掷错误无法识别的名称:小时

非常感谢任何修复/建议和改进。

© www.soinside.com 2019 - 2024. All rights reserved.