SQL BigQuery: выбор запроса по времени - PullRequest
0 голосов
/ 24 апреля 2019

Меня просят найти местоположение пользователя в базе данных с указанием времени.Я хочу выбрать все детали события бронирования за месяц Март в указанное время с 7:00 до 10:00 и с 16:00 до 22:00.

Большойзапрос имеет столбец отметки времени как event_timestamp .чтобы мы могли получить все события бронирования, произошедшие в период с 7:00 до 10:00 и с 16:00 до 22: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')

Кто-нибудь знает, как это сделать?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

почему я не могу использовать "час" в предложении WHERE

Поскольку предложение WHERE оценивается до выполнения SELECT, поэтому hour пока недоступно в то время, когдаГДЕ оценивается.Если вы хотите упростить запрос и использовать hour - вы можете сначала ввести поле hour во внутреннем SELECT, а затем использовать hour во внешнем SELECT, как в примере ниже

#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 голосов
/ 24 апреля 2019

Я получил результат, используя EXTRACT Функция даты с HOUR . Он вернет время отметки времени события в 24-часовых числах (0-23). ​​

ЭКСТРАКТ (часть ИЗ выражения_ даты)

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

Который выдает ошибку Нераспознанное имя: час

Любые исправления / предложения и улучшения приветствуются.

...