Как ссылаться на переменные в части WHERE предложения SQL для bigquery? - PullRequest
0 голосов
/ 26 марта 2020

Я нашел этот код здесь ... помимо проблем с синтаксисом (пропущенная запятая, использование функций в качестве полей, по крайней мере ...), в Google BigQuery выдается сообщение об ошибке «date» в предложении WHERE. Не уверен, что это ошибка в BQ или просто невозможно «угадать» дату ...

CREATE TABLE count_unique_subscribers_per_region_per_day AS (
    SELECT date(calls.datetime) AS date,
        cells.region AS region
        COUNT(DISTINCT msisdn) AS count
    FROM calls
    INNER JOIN cells
        ON calls.location_id = cells.cell_id
    WHERE date >= '2020-02-01'
          AND date <= CURRENT_DATE
    GROUP BY 1, 2

);

Как вы ссылаетесь на date в предложении WHERE?

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Ниже для BigQuery Standard SQL

Просто просто укажите date(calls.datetime) непосредственно, как в примере ниже

CREATE TABLE count_unique_subscribers_per_region_per_day AS (
    SELECT DATE(calls.datetime) AS date,
        cells.region AS region
        COUNT(DISTINCT msisdn) AS count
    FROM calls
    INNER JOIN cells
        ON calls.location_id = cells.cell_id
    WHERE DATE(calls.datetime) BETWEEN '2020-02-01' AND CURRENT_DATE()
    GROUP BY 1, 2

);
1 голос
/ 27 марта 2020

Если вы посмотрите на схему таблиц в этом проекте (https://github.com/Flowminder/COVID-19/blob/master/core_tables.sql), вы увидите, что в таблице calls есть столбец с именем date. Запрос, подобный приведенному в вопросе, будет работать, если в таблице calls есть столбец date.

Если вы видите сообщение об ошибке Unrecognized name: date at, то ваша таблица calls может не работать есть столбец date.

Как вы можете видеть здесь, запрос в вопросе может быть выполнен без проблем, если таблицы содержат правильные данные. О, и мне пришлось добавить точку с запятой тоже:

WITH cells AS (
  SELECT 1 cell_id, 3 region 
)
, calls AS(
  SELECT CURRENT_TIMESTAMP() datetime, CURRENT_DATE() date, 2 msisdn, 1 location_id
)


SELECT date(calls.datetime) AS date,
  cells.region AS region,
  COUNT(DISTINCT msisdn) AS count
FROM calls
INNER JOIN cells
    ON calls.location_id = cells.cell_id
WHERE date >= '2020-02-01'
      AND date <= CURRENT_DATE
GROUP BY 1, 2

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...