본문 바로가기

SQL/프로그래머스

SQL 프로그래머스_7일차 2 두기간 사이 일수,시간 차이 구하기

오랜 기간 보호한 동물(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;