犬の体重記録で前回との差分を計算するSQLクエリ:LAG関数の活用方法

PostgreSQL

犬の体重管理を行う際、前回測定時との差分を自動で計算して表示できると便利です。SQLのLAG関数を活用すれば、各レコードに対して前回の体重を取得し、差分を算出することが可能です。本記事では、具体的なクエリ例と応用方法を解説します。

LAG関数とは何か

LAG関数はウィンドウ関数の一種で、同じグループ内の前の行の値を取得することができます。これを使うことで、前回の体重を現在のレコードと比較することが可能です。

例えば、犬ごとに体重記録を並べて、前回との差分を計算したい場合に非常に便利です。

基本的なクエリ例

犬の体重テーブルが以下のように構成されているとします。

テーブル名: DogWeight
カラム: DogID, MeasurementDate, Weight

LAG関数を使った前回差分の計算例は次の通りです。

SELECT DogID, MeasurementDate, Weight,
Weight – LAG(Weight) OVER(PARTITION BY DogID ORDER BY MeasurementDate) AS WeightChange
FROM DogWeight
ORDER BY DogID, MeasurementDate;

このクエリでは、犬ごとにMeasurementDateで並べ、前回のWeightを取得し、現在のWeightから差分を計算しています。

NULL値への対応

最初の測定記録には前回が存在しないため、LAG関数はNULLを返します。必要に応じてCOALESCE関数を使い、NULLを0や空文字に置き換えることができます。

SELECT DogID, MeasurementDate, Weight,
COALESCE(Weight – LAG(Weight) OVER(PARTITION BY DogID ORDER BY MeasurementDate), 0) AS WeightChange
FROM DogWeight;

応用例:増減のフラグ表示

体重が増えたか減ったかをフラグで表示することも可能です。CASE文と組み合わせることで、視覚的にわかりやすくできます。

SELECT DogID, MeasurementDate, Weight,
CASE WHEN Weight – LAG(Weight) OVER(PARTITION BY DogID ORDER BY MeasurementDate) > 0 THEN ‘増’
WHEN Weight – LAG(Weight) OVER(PARTITION BY DogID ORDER BY MeasurementDate) < 0 THEN '減'
ELSE ‘変化なし’
END AS WeightTrend
FROM DogWeight;

まとめ

LAG関数を活用することで、犬ごとの体重記録における前回との差分や増減傾向を簡単に取得できます。COALESCEやCASE文を組み合わせることで、NULL処理や視覚的な表示も柔軟に行えます。これにより、毎回手作業で計算する手間を省き、効率的にデータ管理が可能です。

コメント

タイトルとURLをコピーしました