繁体   English   中英

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

[英]SQL Query Deduplication / Join Issue

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

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

问题在于Stitch如何刷新数据。 而不是根据对象ID更新记录,而是添加了新行。 根据他们的文档 ,下面的查询应该可以工作,但是由于存在相同_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

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

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匹配的第一条记录(这是自对表进行排序以来的最新记录)

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

尝试使用窗口功能:

#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;

以下是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM