본문 바로가기
(2024-10) 스파르타 내일배움캠프 - 백엔드/TIL

(2024-12-30) TIL: SQL 데일리루틴

by 어뫄어뫄 2024. 12. 30.

1.데일리루틴(SQL)

 

https://leetcode.com/problems/rising-temperature/

직전 날짜의 기온보다 올라갔다면 해당 레코드를 반환하는 문제이다.

 

1)해답

WITH lt AS ( 
SELECT
    id,
    temperature,
    recordDate,
    LAG(temperature, 1, null) OVER(ORDER BY recordDate) AS lastTemperature,
    LAG(recordDate, 1, null) OVER(ORDER BY recordDate) AS lastDate
FROM
    Weather)

SELECT
    id
FROM
    lt
WHERE
    temperature > lastTemperature
    AND DATE_SUB(recordDate, INTERVAL 1 DAY) = lastDate

 

2) 윈도우 함수 - LAG()

  • LAG(temperature, 1, null) OVER(ORDER BY recordDate) AS lastTemperature:
    • LAG() 함수는 현재 행 기준으로 이전 행의 값을 가져옵니다.
    • 1은 몇 행 전의 값을 가져올지 지정하며, null은 앞에 행이 없을 때 반환할 기본값입니다.
    • OVER(ORDER BY recordDate)는 recordDate를 기준으로 정렬한 뒤 윈도우 함수를 적용합니다.
    • 결과는 이전 날짜의 temperature를 lastTemperature로 가져옵니다.
  • LAG(recordDate, 1, null) OVER(ORDER BY recordDate) AS lastDate:
    • 이전 행의 recordDate를 lastDate로 가져옵니다.

3) DATE_SUB() 함수

  • DATE_SUB(recordDate, INTERVAL 1 DAY):
    • recordDate에서 1일을 빼는 함수입니다.
    • 날짜 계산을 위해 사용됩니다.