SQL-基于2个值删除重复项

SQL-基于2个值删除重复项,sql,google-bigquery,Sql,Google Bigquery,我有两个具有相同表结构的Postgresql数据库。出于报告目的,我将这些表的数据推送到一个Google BigQuery表中 在报告表上,我有一个名为databaseID的列,它指示源数据库是什么 databaseID - 1(1st postgres table) databaseID - 2 (2nd postgres table) 现在,每当我将增量数据附加到报告表时。因此,这两个数据源都有重复项 报告表上的示例数据: 我必须为两个数据库ID消除重复数据。我不确定这方面的SQL逻辑 预

我有两个具有相同表结构的Postgresql数据库。出于报告目的,我将这些表的数据推送到一个Google BigQuery表中

在报告表上,我有一个名为databaseID的列,它指示源数据库是什么

databaseID - 1(1st postgres table)
databaseID - 2 (2nd postgres table)
现在,每当我将增量数据附加到报告表时。因此,这两个数据源都有重复项

报告表上的示例数据: 我必须为两个数据库ID消除重复数据。我不确定这方面的SQL逻辑

预期输出-重复数据消除后:
你能试试这样的吗

WITH CTE(ID,NAME,DATABASEID,UPDATED_DATE) AS
 (
    SELECT 1,'AAA',1,'2020-12-01'
       UNION ALL
    SELECT 2,'CCC',1,'2020-12-01'
       UNION ALL
    SELECT 1,'VVV',1,'2021-01-05'
       UNION ALL
   SELECT 1,'QQQ',2,'2020-12-01'
       UNION ALL
   SELECT 2,'WWW',2,'2020-12-01'
      UNION ALL
   SELECT 2,'AAA',2,'2021-01-05'
      UNION ALL
   SELECT 3,'XXX',2,'2020-12-01'
)
 SELECT X.ID,X.NAME,X.DATABASEID,X.UPDATED_DATE FROM 
 (
    SELECT C.ID,C.NAME,C.DATABASEID,C.UPDATED_DATE,
        ROW_NUMBER()OVER(PARTITION BY C.ID,C.DATABASEID ORDER BY C.UPDATED_DATE DESC)XCOL
    FROM CTE AS C 
 )X WHERE X.XCOL=1; 

在BigQuery中,一种简单的方法使用聚合:

select array_agg(r order by updated_date desc limit 1)[ordinal(1)].*
from reporting r
group by id;
考虑以下选项

#standardSQL
select as value array_agg(t order by updated_date desc limit 1)[offset(0)]
from `project.dataset.table` t
group by id, DatabaseID  
对于您问题中的样本数据-以上返回

select array_agg(r order by updated_date desc limit 1)[ordinal(1)].*
from reporting r
group by id;
#standardSQL
select as value array_agg(t order by updated_date desc limit 1)[offset(0)]
from `project.dataset.table` t
group by id, DatabaseID