Соедините две таблицы с одной и той же схемой в bigquery - PullRequest
0 голосов
/ 07 марта 2019

У меня есть две таблицы с той же схемой, что и для ввода:

+---------+--------+----------------------+
|  value  |  city  |   timestamp          |
+---------+--------+----------------------+
| 50      |  LA    |  2019-02-6 03:05pm   |
| 163     |  NYC   |  2019-02-5 03:06pm   |
| 681     |  SF    |  2019-02-4 06:41pm   |
| 35      |  LA    |  2019-02-3 05:12pm   |
+---------+--------+----------------------+

Первая таблица содержит регулярные платежи, а вторая - платежи.Я хочу присоединиться к таблицам и сгруппировать их следующим образом:

+------------+--------+----------+--------------+
|  regular   |  fees  |   city   |  timestamp   |
+------------+--------+----------+--------------+
| 50         | 20     | LA       |  2019-02-6   |
| 163        | NULL   | NYC      |  2019-02-5   |
| 681        | ..     | SF       |  2019-02-4   |
| 35         | ..     | LA       |  2019-02-3   |
+------------+--------+----------+--------------+

Могут быть дни, когда сборы не взимаются.Что я пробовал:

SELECT t1.city, regular, fees, t1.day
FROM
(
  SELECT city, SUM(value) AS regular, FORMAT_TIMESTAMP("%Y-%m-%d", TIMESTAMP(timestamp)) as day
  FROM `payments`
  GROUP BY day, city
) t1
FULL JOIN (
  SELECT city, SUM(value) AS fees, FORMAT_TIMESTAMP("%Y-%m-%d", TIMESTAMP(timestamp)) as day
  FROM `fees`
  GROUP BY day, city
) t2
ON t1.day = t2.day
ORDER BY t1.day DESC

Это дает правильную схему вывода, однако она не суммирует сборы правильно:

+------------+--------+----------+--------------+
|  regular   |  fees  |   city   |  timestamp   |
+------------+--------+----------+--------------+
| 26500      | 6300   | LA       |  2019-02-6   |
| 26500      | 8500   | LA       |  2019-02-6   |
| 26500      | 1000   | LA       |  2019-02-6   |
+------------+--------+----------+--------------+

Как вы видите, я получаю за то же самоеДень и город разные значения платы.Есть идеи, что я здесь делаю не так?

1 Ответ

2 голосов
/ 07 марта 2019

Проблема заключается просто в предложении ON - вы присоединяетесь только к дням, но должны присоединиться к дням и городам, как показано ниже:

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