Sql 页面、联系人和公司的内部连接-重复条目

Sql 页面、联系人和公司的内部连接-重复条目,sql,google-bigquery,metabase,Sql,Google Bigquery,Metabase,简言之:3个表内部联接重复记录 我在BigQuery中有3个表中的数据: 带列的页面视图: 时间戳 用户id 标题 路径 与专栏的联系: 网站\用户\ id 电子邮件 公司id 有栏目的公司: 身份证件 名称 我想显示所有记录的页面视图,如果用户和/或公司已知,则在页面视图旁边显示这些数据 首先,我加入联系人和页面视图数据SQL由Metabase business intelligence tool生成: SELECT `analytics.pageviews`.`timestamp` A

简言之:3个表内部联接重复记录

我在BigQuery中有3个表中的数据:

带列的页面视图:

时间戳 用户id 标题 路径 与专栏的联系:

网站\用户\ id 电子邮件 公司id 有栏目的公司:

身份证件 名称 我想显示所有记录的页面视图,如果用户和/或公司已知,则在页面视图旁边显示这些数据

首先,我加入联系人和页面视图数据SQL由Metabase business intelligence tool生成:

SELECT 
  `analytics.pageviews`.`timestamp` AS `timestamp`, 
  `analytics.pageviews`.`title` AS `title`, 
  `analytics.pageviews`.`path` AS `path`,
  `Contacts`.`email` AS `email`
FROM `analytics.pageviews` 
INNER JOIN `analytics.contacts` `Contacts` ON `analytics.pageviews`.`user_id` = `Contacts`.`website_user_id`
ORDER BY `timestamp` DESC
它按预期工作,我可以看到已知联系人的页面浏览量

接下来,我想显示与已知公司的联系人的页面视图,以及这是哪家公司:

SELECT 
  `analytics.pageviews`.`timestamp` AS `timestamp`,
  `analytics.pageviews`.`title` AS `title`, 
  `analytics.pageviews`.`path` AS `path`, 
  `Contacts`.`email` AS `email`, 
  `Companies`.`name` AS `name`
FROM `analytics.pageviews` 
INNER JOIN `analytics.contacts` `Contacts` ON `analytics.pageviews`.`user_id` = `Contacts`.`website_user_id` 
INNER JOIN `analytics.companies` `Companies` ON `Contacts`.`company_id` = `Companies`.`id`
ORDER BY `timestamp` DESC
通过这个查询,我希望只看到页面视图,其中关联的联系人和公司是已知的,只是公司名称的另一列。问题是,每个页面视图都会有重复的行,有时是5行,有时是20行

我希望避免选择不同的时间戳,因为这可能会导致排除来自不同用户但具有相同时间戳的有效页面视图


如何做到这一点?

你的描述听起来像是你在公司里有双重身份。这很容易测试:

select c.id, count(*)
from `analytics.companies` c
group by c.id
having count(*) >= 2;
您可以使用窗口函数获取详细信息:

select c.*
from (select c.*, count(*) over (partition by c.id) as cnt
      from `analytics.companies` c
     ) c
where cnt >= 2
order by cnt desc, id;

这表明你在分析公司有重复的数据。@GordonLinoff天哪,你说得对!这是我最不愿意看到的错误:谢谢你,因为我要去修复我的错误data@GordonLinoff请您将此作为答案发布,以便@Patryk接受?