오랜 기간 보호한 동물(2)
문제
입양을 간 동물 중, 보호 기간이 가장 길었던 동물 두 마리의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 기간이 긴 순으로 조회해야 합니다.
테이블 소개
테이블 예제
시계열 데이터를 잘다뤘다면 아주 쉬운 문제 였다.
두 기간 일수 차이 계산
DATEIFF(종료일, 시작일)
두기간 시간 차이 계산
TIMEIFF(종료일, 시작일)
01. 두기간의 차이를 시간과 일수로 조회
# 시간으로 일자 계산 코드
-- 데이터 시간을 시분초 까지 조회할때 '%Y-%m-%d %H:%i:%s'
-- !중요 두기간을 계산할때 MAX값이 (838:59:59 = 40일 정도)가 최대인듯 하다!
SELECT A.ANIMAL_ID,A.NAME,
TIMEDIFF(B.DATETIME,A.DATETIME) AS TIME
,DATEDIFF(B.DATETIME,A.DATETIME) AS DAY
FROM ANIMAL_INS A
JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY DAY DESC
02. 테이블을 보다 발견한 점
# !테이블 문제점! 보호소 보호시작일보다 입양간 날짜가 더빠른 데이터 존재
-- 일단 최다기간 두마리만 추출이다보니 상관은 없다.
FROM ANIMAL_INS A
JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
WHERE A.ANIMAL_ID IN ('A381217','A362383')
03. 정답코드
서브쿼리로 먼저 두기간의 차를 구하고
메인쿼리에서 아이디와 이름만 조회하였다,
가장 오랜기간 머무른 동물 두마리를 조회하였다
SELECT C.ANIMAL_ID,C.NAME
FROM (SELECT A.ANIMAL_ID,A.NAME
# DATEDIFF - 두기간 사이 일자수 계산 (종료일,시작일)
,DATEDIFF(B.DATETIME,A.DATETIME) AS DAY
FROM ANIMAL_INS A
JOIN ANIMAL_OUTS B
ON A.ANIMAL_ID = B.ANIMAL_ID
ORDER BY DAY DESC) C
LIMIT 2;
'SQL > 프로그래머스' 카테고리의 다른 글
SQL 프로그래머스_7일차_1 SET, SELECT 서브쿼리 ,변수 컬럼 생성 (0) | 2023.01.04 |
---|---|
SQL 프로그래머스6일차_8 GROUP BY , GROUP_CONCAT(), WITH 활용 (0) | 2023.01.04 |
SQL 프로그래머스 6일차_7 WHERE 서브쿼리 (0) | 2023.01.03 |
SQL 프로그래머스 6일차_5 최대값구하여 최대값에 맞는 ROW 추출 (0) | 2023.01.03 |
SQL 프로그래머스 6일차_3 JOIN , GROUP BY , DATE_FORMAT,컬럼별 합계 (0) | 2023.01.03 |