SQL Serverで連続3日以上散歩している犬を抽出する方法

SQL Server

犬の散歩記録を管理している場合、特定の犬が連続して散歩した日数を抽出したいことがあります。SQL ServerではROW_NUMBER関数や日付関数を活用することで、簡単に連続日数を判定できます。この記事では、連続3日以上散歩した犬を抽出する具体的なSQL例を紹介します。

データ例の前提

ここでは、散歩記録テーブルを以下のように仮定します。

CREATE TABLE WalkRecords (DogID INT, WalkDate DATE);

DogIDで犬を識別し、WalkDateで散歩した日を記録しています。

連続日数を判定する考え方

連続日付を判定する方法として、ROW_NUMBER関数で日付の順序に連番を付与し、日付から連番を引くと連続日付が同じ値のグループにまとまる特徴を利用します。

この方法により、連続した日付を1つのグループとして集計でき、COUNT関数で3日以上かどうか判定可能です。

SQL例

WITH Numbered AS ( SELECT DogID, WalkDate, ROW_NUMBER() OVER(PARTITION BY DogID ORDER BY WalkDate) AS rn FROM WalkRecords ) , Groups AS ( SELECT DogID, WalkDate, DATEADD(DAY, -rn, WalkDate) AS grp FROM Numbered ) SELECT DogID, MIN(WalkDate) AS StartDate, MAX(WalkDate) AS EndDate, COUNT(*) AS ConsecutiveDays FROM Groups GROUP BY DogID, grp HAVING COUNT(*) >= 3 ORDER BY DogID, StartDate;

このクエリの流れは以下の通りです。

  • ROW_NUMBERで犬ごとに日付順に連番を付与
  • 日付から連番を引いてグループ化
  • 各グループごとにCOUNT(*)で連続日数を計算
  • 3日以上のグループを抽出

ポイントと応用

・PARTITION BY句で犬ごとに処理している点が重要です。

・DATEADDで連番を調整することで、連続日付のグループ化が簡単に行えます。

・連続日数の条件を変えれば、任意の日数で抽出することも可能です。

まとめ

SQL ServerではROW_NUMBER関数と日付演算を組み合わせることで、簡単に連続日数を判定できます。この方法を応用すれば、散歩記録だけでなく、連続勤務日や連続学習日などの分析にも活用可能です。

コメント

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