はじめに
データ分析では満年齢を考慮しなければいけない場面があります。例えば、教育や健康に関するデータを分析する場合、わずかな年齢の違いが分析に大きな影響を及ぼすため、満年齢を用いることで、より詳細な傾向やパターンを識別できるようになります。
年齢の考え方
年齢とは今年と生まれ年の差ではない
年齢を求める際、真っ先に陥りがちな考え方として、下記の式のような『今年から生まれ年を引けばよい』かと思います。
DATE_DIFF(CURRENT_DATE(),birthday,Year)
ただ、このやり方ですと日付によって正しい値が取れません。
例)例 2000/04/20生まれのレコード(2024/04/26時点)
DATE_DIFF(CURRENT_DATE(),'2000-04-20',Year)
→24 正しい
例)例 2000/04/30生まれのレコード(2024/04/26時点)
DATE_DIFF(CURRENT_DATE(),'2000-04-30',Year)
→24 間違い
原因
DATE_DIFF(CURRENT_DATE(),birthday,Year)
DATE_DIFF関数では、単純な年の引き算の結果を出してるため、満年齢を算出することができない。
満年齢を算出する関数
では満年齢を算出するにはどうしたらいいでしょうか。それには下記を使用します。
CAST(TRUNC((CAST(FORMAT_DATE('%Y%m%d', CURRENT_DATE()) as INT64) - CAST(FORMAT_DATE('%Y%m%d', birthday) AS INT64)) / 10000) AS INT64)
中身を分解して解説します。
・現在日時(西暦)
CAST(FORMAT_DATE('%Y%m%d', CURRENT_DATE()) as INT64)
→20240626
・誕生日(西暦)例 2000/04/30生まれのレコード
CAST(FORMAT_DATE('%Y%m%d',birthday) AS INT64)
→20000430
・(現在日時(西暦) – 誕生日(西暦)) / 10000
(CAST(FORMAT_DATE('%Y%m%d', CURRENT_DATE()) as INT64) - CAST(FORMAT_DATE('%Y%m%d','2000-04-30') AS INT64)) / 10000
→24.0196
・小数点以下切捨て
TRUNC((CAST(FORMAT_DATE('%Y%m%d', CURRENT_DATE()) as INT64) - CAST(FORMAT_DATE('%Y%m%d', '2000-04-30') AS INT64)) / 10000
→24
最後にCAST AS INT64で囲むことで整数にします。『24.0→24』
まとめ
(現在日時(西暦) – 誕生日(西暦)) / 10000から小数点以下を切り捨てることで満年齢を導けるので、もし他の言語で年齢の計算に行き詰まったら参考にしてください!
データ活用でお困りの方へ
私たちDX-Accelerator事業では、データ活用についての様々なスキルを持った人材が常駐でデータ活用支援を行うサービスを提供しています。
当事業はローンチから約3年(24年9月時点)ですが、これまでに様々な業界・業種のお客さまのお手伝いをさせていただいております。
少しでも興味を持ってくださったり、すでにご相談をしたいことがある方はお気軽にご相談ください。現在あなたの組織のフェーズがどこにあるかは関係ありません。まずはお話をしましょう。
もう少しサービスについて知りたい方はサービス紹介資料もご用意しています。