노래 재생을 하면 일정시간 뒤에 playinfo 테이블에 insert가 됩니다!
playinfo에 insert된 갯수(플레이 횟수)에 따라 일간 월간 차트도 나타내고 있구여!
근데 예를 들어 s_no = 1 , a_no = 1 인 노래의 지금까지의 일간 최고 순위(플레이 횟수 기준)를 알고 싶은데 도저히 안되고 있습니다 ㅠㅠㅠ
select substr(p_date,0,8), s_no, a_no from playinfo group by substr(p_date,0,8),s_no,a_no order by substr(p_date,0,8);
날짜별로 짤라서 데이터는 분류해놨는데, 여기서 순위를 멕이고 그 순위들 중에 최고 순위 뽑아오는게 도저히 모르겠습니다...
테이블 구성과 샘플로 들어가있는 데이터는 첨부하였습니다 ㅠㅠㅠ
SELECT RANK() OVER(ORDER BY play_cnt DESC) NO
, p_date
, play_cnt
FROM
(
SELECT trunc(p_date, 'DD') p_date, count(p_no) play_cnt
FROM playinfo
WHERE a_no = 1 AND s_no = 1
GROUP BY trunc(p_date, 'DD')
)
날짜 타입에 문자 함수인 SUBSTR 사용은 잘못된 사용입니다.
또한, SUBSTR 함수의 시작점은 0 이 아닌 1 입니다.
SELECT *
FROM (SELECT s_no
, a_no
, ymd
, cnt
, rk
, RANK() OVER(PARTITION BY s_no, a_no ORDER BY rk) rk1
FROM (SELECT s_no
, a_no
, TO_CHAR(p_date, 'yyyymmdd') ymd
, COUNT(*) cnt
, RANK() OVER(PARTITION BY TO_CHAR(p_date, 'yyyymmdd')
ORDER BY COUNT(*) DESC) rk
FROM playinfo
GROUP BY s_no, a_no
, TO_CHAR(p_date, 'yyyymmdd')
)
WHERE s_no = 1
AND a_no = 1
)
WHERE rk1 = 1
;
으아 마농님 감사합니다. 한가지만 더 여쭙자면 ㅠㅠ 지금 보여주신 쿼리가 rk1=1 인 조건인데 1위인 조건 말구 그동안의 rk1 중에서 제일 높은 rk1이 필요합니당 ㅠㅠ 답해주신 쿼리 분석하는데만 오래걸린 저로서는 where 조건 바꾸는것도 힘겹네여 으 ㅠㅠ 어찌 저렇게 짜시지 ㅠㅠ
아 그렇군요ㅠㅠ 감사합니다 정말
잘못 판단하신 것 같습니다.
rk 가 순위입니다.
rk1 은 순위가 아니라 순위(rk)가 가장 높은 것을 찾기 위한 도구입니다.