会社、仕事、および日付ごとにグループ化された「最初のスキャン」の数を決定する必要があるデータベースのレポートを作成しています。
スキャン テーブルには同じアイテムの複数のスキャンを含めることができますが、特定のアイテムに一致する最も古い日付のスキャンとしてのみ識別できる元のスキャンのみを COUNT に含めたいと考えています。
これに対する私の最初の試みは次のとおりです。
SELECT
_item_detail.job_id,
_item_group.group_id,
_scan.company_id,
DATE(scan_date_time) as scan_date,
COUNT(1)
FROM _scan
INNER JOIN _item_detail ON _item_detail.company_id = _scan.company_id
AND
_item_detail.serial_number = _scan.serial_number
INNER JOIN _item_group ON _item_group.group_id = _item_detail.group_id
WHERE _item_detail.job_id = '0326FCM' AND _scan.company_id = '152345' AND _item_group.group_id = 13
GROUP BY
_item_detail.job_id,
_item_group.group_id,
_scan.company_id, scan_date -- first_scan_count
HAVING min(scan_date_time);
ただし、これにより誤った結果が得られます (約 3 倍多すぎます)。これは、日付ごとに MIN レコードが再計算されているためであると想定しているため、1 日目に分が見つかった場合、3 日目にも見つかって再度カウントされる可能性があります。
クエリを変更して目的の結果を得るにはどうすればよいですか?