如何比较BigQuery/SQL中两个时间不同但其他方面相同的表?



我有两个表,current和prev。每天,curr都会被复制到prev,并成为新的prev。然后,从外部源更新curr。表具有相同的模式。我正在使用SQL的BQ风格。

表的粗略布局是主电子邮件作为唯一键,然后是订阅记录。同一用户(由主电子邮件标识)可以有多个历史订阅,尽管当前只有一个订阅是活动的。字段包括订阅开始日期、订阅金额、取消状态等。

我希望只选择两个表之间的差异,即只选择最近更改过的记录,例如开始日期,金额或取消状态。

然而,我在挣扎。我试过从两个表中选择DISTINCT,其中current .start_date!=prev。start_date(或任何其他感兴趣的字段),但它只是给我以前持有多个订阅的人。可能有一种方法可以使用PARTITION BY和ROW ORDER只返回最新的订阅,但我不确定如何做到这一点。

我也尝试过SELECT* FROM current EXCEPT DISTINCT SELECT* FROM prev,但我认为这只会给我新的而不是更新的行。

有人能给我指个正确的方向吗?提前感谢。

一些表格数据-当前和预览都是这样的。在更新的情况下,在curr中创建一个新条目,Primary_Email保持不变。

amounttbody> <<tr>Minnie.mouse@gmail.com取消次
primary_emailstart_datestatuscancellation_typefrequencybundle
Mickey.mouse@gmail.com2020-10-14活动活动300每月
2021-01-1212道明>b
Roger.rabbit@gmail.com2019-08-14失败后起动25道明>b
John.doe@gmail.com2020-04-24活动活动555每月
Jane.doe@gmail.com2021-02-12失败后起动15道明>c

我想你很接近了。您可以为每个select添加条件,以确保您只考虑在两个表之间共享的电子邮件地址。

select * 
from curr 
where email in (select email from prev)
except 
select * 
from prev
where email in (select email from curr)

相关内容

  • 没有找到相关文章

最新更新