勤怠管理に取り組んでいます。チェックインとチェックアウトは、テーブル内の 2 つの異なるレコードです
誰かが数日間サインアウトしなかった可能性もありますが、その日の出席としてカウントされる必要があります
担当者 ID - チェックイン時間 - チェックアウト時間 3842 12/17/2022 09:030 -- チェックアウトなし (2022 年 12 月 17 日以降は毎日カウントされる必要があります) 3843 2022/12/17 08:00 -- 2022/12/17 09:30 (以下同日) 3843 2022/12/17 11:00 -- 2022/12/17 13:30 (上記は同日) 3841 12/17/2022 08:00 -- 12/17/2022 17:45. (簡易同日) 3844 12/17/2022 22:00 -- 12/18/2022 6:40 (真夜中を過ぎる - 12/17 と 12/18 をカウントする必要があります) 私の望む結果は 12/15 1名 12/17 4名 12/18 2名
X 日に何人出席するかを知りたいです
2 つの異なるレコード (チェックインとチェックアウト) または 1 つのみのレコード (チェックイン) を処理する方法が少しわかりません
CREATE TABLE `my_history` ( `id` int(11) NOT NULL AUTO_INCREMENT、 `person_id` int(11) デフォルト NULL、 `アクション` varchar(24) デフォルト NULL、 `when_created` タイムスタンプ NULL DEFAULT CURRENT_TIMESTAMP, 主キー (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
一部の挿入ステートメント
INSERT INTO `my_history` (`person_id`、`action`、`when_created`) 価値観 (3842, 'チェックイン', '2022-12-15 08:00:00'), (3842, 'チェックアウト', '2022-12-15 09:30:00'), (3842, 'チェックイン', '2022-12-17 09:30:00'), (3843, 'チェックイン', '2022-12-17 08:00:00'), (3843, 'チェックアウト', '2022-12-17 09:30:00'), (3843, 'チェックイン', '2022-12-17 11:00:00'), (3843, 'チェックアウト', '2022-12-17 13:30:00'), (3841, 'チェックイン', '2022-12-17 08:00:00'), (3841, 'チェックアウト', '2022-12-17 17:42:00'), (3844, 'チェックイン', '2022-12-17 22:00:00'), (3844, 'チェックアウト', '2022-12-18 06:40:00'); CREATE TABLE 人 ( idINT(11) ) に挿入 人 価値観 (3841)、 (3842)、 (3843)、 (3844) ;
通常、この状況をテストするには、関心のある日付がチェックイン日より後であり、チェックアウト日より小さいかどうかを確認する必要があります。例えば### リーリー
チェックアウト日が空でも「OK」になる状況を解決するには、空の値を条件を満たす値に置き換えるだけです。リーリー
要件の変更により、古い回答は削除されました。急いでいたので説明する時間がありませんでした。
リーリーhttps://dbfiddle.uk/RXx0x9xt