我有 2 个具有相同表结构的 Postgresql 数据库。出于报告目的,我将这些表的数据推送到单个 Google BigQuery 表中。
在报表上,我有一个名为 databaseID 的列,它指示源数据库是什么。
databaseID - 1(1st postgres table)
databaseID - 2 (2nd postgres table)
现在每次我都将增量数据附加到报表中。所以它有两个数据源的重复项。
id name DatabaseID updated_date
1 aaa 1 2020-12-01
2 ccc 1 2020-12-01
1 vvv 1 2021-01-05
1 qqq 2 2020-12-01
2 www 2 2020-12-01
2 aaa 2 2021-01-05
3 xxx 2 2020-12-01
我必须为这两个数据库 ID 删除重复数据。我不确定这个的 SQL 逻辑。
id name DatabaseID updated_date
2 ccc 1 2020-12-01
1 vvv 1 2021-01-05
1 qqq 2 2020-12-01
2 aaa 2 2021-01-05
3 xxx 2 2020-12-01
答案 0 :(得分:0)
你能不能试试这样的:
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;
答案 1 :(得分:0)
考虑以下选项
#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
对于您问题中的示例数据 - 以上返回
答案 2 :(得分:-1)
在 BigQuery 中,一种简单的方法是使用聚合:
select array_agg(r order by updated_date desc limit 1)[ordinal(1)].*
from reporting r
group by id;