「特定の日付範囲内の有効なレコードを求める SQL クエリ」
P粉884667022
2023-08-31 13:58:14
<p>勤怠管理に取り組んでいます。チェックインとチェックアウトは、テーブル内の 2 つの異なるレコードです</strong></p>
<p>誰かが数日間サインアウトしなかった可能性もありますが、その日の出席としてカウントされる必要があります</p>
<pre class="brush:php;toolbar:false;">担当者 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名</pre>
<p>X 日に何人出席するかを知りたいです</p>
<p>2 つの異なるレコード (チェックインとチェックアウト) または 1 つのみのレコード (チェックイン) を処理する方法が少しわかりません</p>
<pre class="brush:php;toolbar:false;">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;</pre>
<p>一部の挿入ステートメント</p>
<pre class="brush:php;toolbar:false;">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