SQLで犬の最新診察記録を取得する方法と実践例

SQL Server

犬の診察履歴を管理するデータベースで、各犬の最新の診察記録のみを取得したい場合があります。これを実現するには、SQLの集計関数やサブクエリ、ウィンドウ関数を活用する方法があります。本記事では、その具体的な方法とポイントを解説します。

サブクエリを使った最新記録の取得

最も基本的な方法は、犬IDごとの最大診察日をサブクエリで取得し、元のテーブルと結合する方法です。

SELECT dv.*
FROM dog_visits dv
JOIN (
  SELECT dog_id, MAX(visit_date) AS latest_date
  FROM dog_visits
  GROUP BY dog_id
) latest ON dv.dog_id = latest.dog_id AND dv.visit_date = latest.latest_date;

このSQLでは、各犬ごとの最新の診察日を求め、その日付に対応する診察記録を抽出しています。

ウィンドウ関数を使った方法

PostgreSQLやMySQL 8.0以降では、ウィンドウ関数を使って各犬の最新診察記録を簡単に取得できます。

SELECT dog_id, visit_date, diagnosis
FROM (
  SELECT *, ROW_NUMBER() OVER(PARTITION BY dog_id ORDER BY visit_date DESC) AS rn
  FROM dog_visits
) t
WHERE rn = 1;

ROW_NUMBER関数で犬ごとの診察記録に順位をつけ、最新の1件だけを抽出する方法です。

複数条件での活用

必要に応じて、診察内容や期間などの条件も組み合わせることが可能です。例えば、過去1年以内の最新記録だけを抽出する場合はWHERE句で期間を指定します。

SELECT dv.*
FROM dog_visits dv
JOIN (
  SELECT dog_id, MAX(visit_date) AS latest_date
  FROM dog_visits
  WHERE visit_date >= '2025-01-01'
  GROUP BY dog_id
) latest ON dv.dog_id = latest.dog_id AND dv.visit_date = latest.latest_date;

実務での活用ポイント

この方法は、診察履歴の最新状態を管理したり、レポート作成や通知システムの基礎データとして活用できます。インデックスをvisit_dateやdog_idに設定すると、パフォーマンスも向上します。

まとめ

犬の最新診察記録を取得するには、サブクエリやウィンドウ関数を使う方法が有効です。GROUP BYで最大日付を取得したり、ROW_NUMBERで順位付けすることで、各犬の最新記録のみを効率的に抽出できます。

コメント

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