SQL查询重复数据删除/联接问题

时间:2018-06-27 00:50:36

标签: sql google-bigquery

我一直在经历最糟糕的时间来尝试编写我认为应该非常简单的查询来处理重复的条目。

对于上下文:我已经使用Big Query创建了一个数据仓库,并且正在使用Stitch从Hubspot提取数据。一切都按预期完成,如下所示:我已经确认BigQuery中的记录数正确。

问题在于Stitch如何刷新数据。而不是根据对象ID更新记录,而是添加了新行。根据他们的documentation,下面的查询应该可以正常工作,但这并不是简单的原因,因为给定记录的多个版本具有相同的_sdc_sequence(我认为不应该存在)。我还可以使用其他_sdc(针迹系统字段)来提供帮助,但是由于与上述相同的原因,它也不是完全可靠的。

SELECT DISTINCT o.*
FROM [sample-table:hubspot.companies] o
INNER JOIN (
    SELECT
        MAX(_sdc_sequence) AS seq,
        id
    FROM [sample-table:hubspot.companies]
    GROUP BY companyid ) oo
ON o.companyid = oo.companyid
AND o._sdc_sequence = oo.seq

上面的查询返回的结果少于应有的结果。如果我运行以下查询,则会得到正确数量的结果,但是除了公司ID外,我还需要其他字段,例如名称,说明,收入等。

SELECT o.companyid
FROM [samples_table:hubspot.companies] o
GROUP BY o.companyid

我正在尝试类似的操作,但是它不起作用(出现以下错误(GROUP BY列表中不存在表达式“ oo.properties.name.value”)。

SELECT o.companyid,
  oo.properties.name.value,
  oo.properties.hubspot_owner_id.value,
  oo.properties.description.value
FROM [sample_table:hubspot.companies] o
LEFT JOIN [sample_table:hubspot.companies] oo
  ON o.companyid = oo.companyid
GROUP BY o.companyid

我是我的主意,我的想法是:

  1. 获取唯一记录ID(公司ID)的列表
  2. 对按插入时间排序的原始未分组公司表执行SQL“ vlookup等效项”,以获取与id匹配的第一条记录(这将是对表进行排序后的最新记录)

我只是不知道该怎么写...

2 个答案:

答案 0 :(得分:2)

尝试使用窗口功能:

#standardSQL

SELECT c.*
FROM (SELECT c.*,
             ROW_NUMBER() OVER (PARTITION BY companyid ORDER BY _sdc_sequence DESC) as seqnum 
      FROM `sample-table.hubspot.companies` c
     ) c
WHERE seqnum = 1;

答案 1 :(得分:2)

以下是用于BigQuery标准SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY _sdc_sequence DESC LIMIT 1)[OFFSET(0)]
FROM `sample-table.hubspot.companies` t
GROUP BY companyid