ADD_MONTHS(기준 날짜, 숫자) : 기준 날짜의 월에서 숫자만큼 더하거나 뺀다
✔️주의할 점은 날짜의 이전달이나 다음달에 기준날짜의 일자가 존재하지 않으면 해당 월의 마지막 일자가 리턴된다.
예를 들어 "2019-03-31"의 이전달은 "2019-02-28"이 된다.
출처: https://gent.tistory.com/260
나는 매달 조회수 랭크를 매겨서 그 달의 1,2,3등을 뽑는 쿼리를 짜야 했다.
그래서 아래와 같이 쿼리를 짰고 ADD_MONTH의 -3 자리는 컨트롤러에서 숫자만 바꿔서 실행시켜서 달마다 뽑게 했다.
-- MONTH는 몇 월인지 표시용
-- 댓글과 좋아요는 없을 수 있어서 아우터 조인과 NVL 사용
-- ADD_MONTH의 -3 자리는 숫자만 바꿔가며 사용
-- 랭크 1~3등 뽑기
SELECT R.RECIPE_NO, R.RECIPE_TITLE, R.MEM_NAME, R.IMG,
R.CMT_CNT, R.LIKE_CNT, R.HIT, TO_CHAR(R.REG_DATE, 'MM')AS MONTH
FROM (SELECT M.MEM_NAME, R.RECIPE_TITLE, R.RECIPE_NO,
NVL(RC.CNT, 0) AS CMT_CNT, R.REG_DATE,
NVL(RL.CNT, 0) AS LIKE_CNT, RI.IMG, R.HIT,
ROW_NUMBER() OVER(ORDER BY R.HIT DESC) AS HIT_RANK
FROM RECIPE R INNER JOIN MEMBER M
ON M.MEM_NO = R.MEM_NO
INNER JOIN RECIPE_IMG RI
ON R.RECIPE_NO = RI.RECIPE_NO
AND RI.IMG_TYPE = 0
AND RI.DEL = 1
LEFT OUTER JOIN (SELECT COUNT(*) AS CNT, RECIPE_NO, DEL
FROM RECIPE_LIKE
WHERE DEL = 1
GROUP BY RECIPE_NO, DEL)RL
ON R.RECIPE_NO = RL.RECIPE_NO
LEFT OUTER JOIN (SELECT COUNT(*) AS CNT, RECIPE_NO, DEL
FROM RECIPE_CMT
WHERE DEL = 1
GROUP BY RECIPE_NO, DEL)RC
ON R.RECIPE_NO = RC.RECIPE_NO
WHERE R.DEL = 1
AND TO_CHAR(R.REG_DATE, 'YY/MM')
= TO_CHAR(ADD_MONTHS(TO_DATE(SYSDATE, 'YY/MM/DD'), -3), 'YY/MM'))R
WHERE R.HIT_RANK BETWEEN 1 AND 3
;
'자율 학습 > 학습' 카테고리의 다른 글
bxSlider에서 onclick 이벤트가 안 될 때 (0) | 2022.10.19 |
---|---|
카카오 사태 알아보기 - DR (Disaster Recovery, 재해복구), Mirror site, Hot Site, Warm Site, Cold Site (0) | 2022.10.18 |
int에 null을 담을 수 없음 (없는 데이터 조회, 즐겨찾기 구현) (0) | 2022.10.07 |
[카카오 맵 API] 데이터베이스에서 주소 데이터 받아서 지도에 마커 찍기, 키워드 검색하기 (0) | 2022.10.05 |
[카카오 맵 API] 마커 infowindow 하나만 열리게 하기 (0) | 2022.10.04 |