如何使用标准SQL BIG查询语法将其重写而不重复?

时间:2019-06-26 21:08:40

标签: sql google-bigquery

将两个表和时间条目表合并到用户表中。当前使用Big查询标准SQL。列ID对于每个条目应该有1个唯一ID,但是它会提取相同ID的倍数#我的问题如何在不重复查询结果的情况下重写此查询?如何在UNION ALL或UNION DISTINCT中使用LEFT Join?

--*** Gives Duplications for some reason *** 
SELECT outer_e.hours, outer_e.id, outer_e.updated_at, outer_e.spent_date, u.first_name, u.is_active, u.id AS user_id, u.weekly_capacity FROM
  (SELECT e.id, MAX(e.updated_at) AS updated_at FROM `harvest-experiment.harvest.time_entries` AS e
  GROUP BY e.id LIMIT 1000) AS inner_e
LEFT JOIN `harvest-experiment.harvest.time_entries` AS outer_e
ON inner_e.id = outer_e.id AND inner_e.updated_at = outer_e.updated_at
LEFT JOIN `harvest-experiment.harvest.users` AS u
ON outer_e.user_id = u.id

1 个答案:

答案 0 :(得分:0)

我在我的SELECT关键字旁边缺少了DISTANT关键字,这样做似乎可以解决视图中的重复问题。

__***** Current Solution *****———
--*** Returns a Left Joined Table of `time entries` and `users` *** 
SELECT DISTINCT outer_e.hours, outer_e.id, outer_e.updated_at, outer_e.spent_date, outer_e.created_at, outer_e.client_id, u.is_admin, u.first_name, u.is_active, u.id AS user_id, u.weekly_capacity, client.name FROM
  (SELECT  e.id, MAX(e.updated_at) AS updated_at FROM `harvest-experiment.harvest.time_entries` AS e 
  GROUP BY e.id LIMIT 1000) AS inner_e
LEFT JOIN `harvest-experiment.harvest.time_entries` AS outer_e
ON inner_e.id = outer_e.id AND inner_e.updated_at = outer_e.updated_at
LEFT JOIN `harvest-experiment.harvest.users` AS u
ON outer_e.user_id = u.id