"특정 날짜 범위 내의 유효한 레코드에 대한 SQL 쿼리"
P粉884667022
2023-08-31 13:58:14
<p>출석관리 작업을 하고 있습니다. 체크인과 체크아웃은 테이블</strong></p>에서 서로 다른 두 가지 기록입니다.
<p>누군가가 며칠 동안 로그아웃하지 않았을 가능성이 있지만 당일 출석으로 간주되어야 합니다</p>
<pre class="brush:php;toolbar:false;">직원 ID - 체크인 시간 - 체크아웃 시간
3842 2022년 12월 17일 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 2022년 12월 17일 08:00 -- 2022년 12월 17일 17:45 (단순 당일)
3844 2022년 12월 17일 22:00 -- 2022년 12월 18일 6:40 (자정을 통과하는 경우 - 12월 17일 및 12월 18일을 계산해야 함)
내가 원하는 결과는
12/15 1명
12/17 4명
12/18 2명</pre>
<p>X일에 몇 명이 참석했는지 알고 싶습니다</p>
<p>두 개의 다른 기록(체크인 및 체크아웃)을 처리하는 방법이나 하나의 기록(체크인)만 처리하는 방법이 약간 혼란스럽습니다</p>
<pre class="brush:php;toolbar:false;">CREATE TABLE `my_history`(
`id` int(11) NOT NULL AUTO_INCREMENT,
`person_id` int(11) 기본 NULL,
`action` varchar(24) DEFAULT 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;">`my_history`에 삽입( `person_id`, `action`, `when_created`)
가치
(3842, 'checked_in', '2022-12-15 08:00:00'),
(3842, 'checked_out', '2022-12-15 09:30:00'),
(3842, 'checked_in', '2022-12-17 09:30:00'),
(3843, 'checked_in', '2022-12-17 08:00:00'),
(3843, 'checked_out', '2022-12-17 09:30:00'),
(3843, 'checked_in', '2022-12-17 11:00:00'),
(3843, 'checked_out', '2022-12-17 13:30:00'),
(3841, 'checked_in', '2022-12-17 08:00:00'),
(3841, 'checked_out', '2022-12-17 17:42:00'),
(3844, 'checked_in', '2022-12-17 22:00:00'),
(3844, 'checked_out', '2022-12-18 06:40:00');
테이블 만들기 사람(
아이디INT(11)
)
에 집어 넣다
사람
가치
(3841),
(3842),
(3843),
(3844)</pre></p>
일반적으로 이 상황을 테스트하려면 관심 있는 날짜가 체크인 날짜보다 이후인지, 체크아웃 날짜보다 짧은지 확인해야 합니다. 예를 들어
으아악체크아웃 날짜가 비어 있어도 여전히 "OK"일 수 있는 상황을 해결하기 위해 빈 값을 조건에 맞는 값으로 간단히 대체합니다.
으아악요구 사항 변경으로 인해 이전 답변이 삭제되었습니다. 바빠서 설명할 시간도 없었습니다.
으아악https://dbfiddle.uk/RXx0x9xt