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