旧テーブルと新テーブルについて月別で件数差分を出力する時のサンプルコード

with oldBase as (
  select
    date_format(date_trunc('MONTH', createdAt), 'YYYY-MM') as ym,
    count(1) as old_count
  from
    dataset.oldtable  -- 旧テーブルを指定
  group by 1
),
newBase as (
  select
    date_format(date_trunc('MONTH', createdAt), 'YYYY-MM') as ym,
    count(1) as new_count
  from
    dataset.newtable  -- 新テーブルを指定
  group by 1
)
select
  coalesce(o.ym, n.ym) as ym, -- oldとnewどちらかの月にしかレコードない場合の考慮
  o.old_count,
  n.new_count,
  o.old_count - n.new_count as diff
from
  oldBase as o
  full join newBase as n using(ym)
order by 1;

旧テーブルと新テーブルの差分レコードを出力する時のサンプルコード

with oldBase as (
  select
    * -- SnowflakeにはBigQueryの "* EXCEPT(column_name)" と同等の構文がないため、
      -- 必要な列を明示的に指定する必要があります。
      -- もし "addColumn1" を除外したい場合は、以下のように列リストを記述してください。
      -- 例: columnA, columnB, columnC, ...
  from
    dataset.oldtable -- 旧テーブルを指定
),
newBase as (
  select
    * -- 同様に、除外したい列がある場合は明示的に列リストを記述してください。
      -- 例: columnA, columnB, columnC, ...
  from
    dataset.newtable -- 新テーブルを指定
),
diff as (
  select 'old_diff' as status, * from ( select * from oldBase except select * from newBase)
  union all
  select 'new_diff' as status, * from ( select * from newBase except select * from oldBase)
)
select * from diff
order by status, 2; -- statusでソート後、2番目の列(最初のデータ列)でソート



この記事が気に入ったら『目黒で働く分析担当の作業メモ』ご支援をお願いします!

※OFUSEに飛びます


おすすめの記事