首页 > 解决方案 > 如何在BigQuery中获取两行之间的差异**和**差异所在字段的名称?

问题描述

我在BigQuery中有一个这样的表:

姓名 电话号码 地址
约翰 123456778564 1便士巷
约翰 873452987424 1便士巷
玛丽 845704562848 第五大道 87 号
玛丽 845704562848 林肯路 54 号
艾米 342847327234 4海洋大道大道
艾米 347907387469 杜鲁门路 98 号

我想获得一个表,其中包含两个连续行之间的差异以及出现差异的字段名称:

我的意思是:

姓名 场地
约翰 电话号码 123456778564 873452987424
玛丽 地址 第五大道 87 号 林肯路 54 号
艾米 电话号码 342847327234 347907387469
艾米 地址 4海洋大道大道 杜鲁门路 98 号

我怎样才能做到这一点 ?我查看了其他帖子,但找不到符合我需要的内容。

谢谢

标签: sqlgoogle-bigquery

解决方案


一种方法是使用lag()union all

select name, 'phone', prev_phone as before, phone as after
from (select name, phone,
             lag(phone) over (partition by name order by timestamp) as prev_phone
      from t
     ) t
where prev_phone <> phone
union all
select name, 'address', prev_address as before, address as afte4r
from (select name, address,
             lag(address) over (partition by name order by timestamp) as prev_address
      from t
     ) t
where prev_address <> address

推荐阅读