반응형
부모 레코드별 최신 자식 레코드(조건 포함) 찾기
부모/자녀 계층이 있는 테이블이 2개 있고 각 부모 레코드에 대한 최신 자녀 레코드의 ID를 풀려고 하지만 풀 중인 자녀 레코드에 적용되는 조건도 있습니다.
제 테이블은 다음과 같습니다.
-----------
| Quizzes |
-----------
| ID |
-----------
| 1 |
| 2 |
| 3 |
-----------
-------------------------------------
| QuizAttempts |
-------------------------------------
| ID | QuizID | AttemptedAt |
-------------------------------------
| 1 | 1 | 2021-01-01 05:00:00 |
| 2 | 1 | 2021-01-01 08:30:00 |
| 3 | 2 | 2021-01-01 05:00:00 |
| 4 | 3 | 2021-01-01 07:00:00 |
| 5 | 3 | 2021-02-01 07:00:00 |
| 6 | 3 | 2021-03-01 07:00:00 |
-------------------------------------
자, 제가 최근의 아이디를 뽑고 싶다고 치자.QuizAttempt
일별로Quiz
에서 시도된 것입니다.2021-01-01 00:00:00
로.2021-01-01 23:59:59
이와 같은 모습을 하고 있습니다.
------------------------------------------------
| QuizID | QuizAttemptID | AttemptedAt |
------------------------------------------------
| 1 | 2 | 2020-01-01 08:30:00 |
| 2 | 3 | 2020-01-01 05:00:00 |
| 3 | 4 | 2020-01-01 07:00:00 |
------------------------------------------------
현재 최신 QC를 끌어오기 위해 ID를 비교하기 위해 자기 참조 가입을 수행하고 있습니다.
SELECT attempts1.ID
FROM QuizAttempts AS attempts1
LEFT OUTER JOIN QuizAttempts AS attempts2
ON (attempts1.QuizID = attempts2.QuizID
AND attempts1.ID < attempts2.ID)
WHERE attempts2.ID IS NULL;
최신 아동 기록을 끄집어낼 때 효과가 있습니다그러나 날짜 범위 조건을 추가할 때(추가하는 것과 같이)attempts1.AttemptedAt BETWEEN '2021-01-01 00:00:00' AND '2021-01-01 23:59:59'
), 빈 결과가 나옵니다.
하위 쿼리에서 창 기능을 제안합니다.
SELECT qa.*
FROM (SELECT qa.*,
ROW_NUMBER() OVER (PARTITION BY QuizID ORDER BY id DESC) as seqnum
FROM QuizAttempts qa
WHERE qa.attemptedat >= '2021-01-01' AND
qa.attemptedat < '2021-01-02'
) qa
WHERE seqnum = 1;
시간 성분을 처리할 필요 없이 날짜 연산이 훨씬 간단합니다.
편집:
상관된 하위 쿼리를 사용할 수도 있습니다.
SELECT qa.*
FROM QuizAttempts qa
WHERE qa.id = (SELECT MAX(qa2.id),
FROM QuizAttempts qa2
WHERE qa2.QuizID = qa.QuizID AND
qa2.attemptedat >= '2021-01-01' AND
qa2.attemptedat < '2021-01-02'
) qa;
언급URL : https://stackoverflow.com/questions/68536489/find-latest-child-record-with-conditions-per-parent-record
반응형
'programing' 카테고리의 다른 글
도커 로그인: '스터브가 잘못된 데이터를 수신했습니다' 자격 증명을 저장하는 중 오류가 발생했습니다. (0) | 2023.09.09 |
---|---|
오류: 스키마 유효성 검사에 실패하고 다음 오류가 발생했습니다. 데이터 경로 ""에 추가 속성이 없어야 합니다(프로젝트). (0) | 2023.09.09 |
HTML에서 PDF를 생성하기 위해 wkhtmltopdf 호출 (0) | 2023.09.09 |
jQuery: 버튼을 제외한 첫번째 보이는 입력/선택/텍스트 영역을 찾는 방법? (0) | 2023.09.09 |
Swift를 사용하여 정수인 NSDates 간의 차이(초) 찾기 (0) | 2023.09.09 |