안녕하세요
가장 최근 날짜의 데이터와 그에 맞는 값을 조회하려고하는데
오라클과 달리 mariadb에서는 group by 후 order by desc를 적용하니 그냥 맨 처음값을 가져옵니다.
최근날짜는 max로 해결했는데 가장 최근의 amt값은 어떻게 가져올수있을까요?
현재 쿼리는 이렇게 만들었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | select trnsctn_dt, a.id, amt, from ( select max (trnsctn_dt) as trnsctn_dt, id, amt from table where trnsctn_dt >= curdate() - interval 0 day group by id order by trnsctn_dt desc ) as a join table b on a.id = b.id group by a.id order by trnsctn_dt desc ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 | -- 1. 분석함수 지원 버전(10.0 ?)인 경우 SELECT id , trnsctn_dt , amt FROM ( SELECT id , trnsctn_dt , amt , ROW_NUMBER() OVER(PARTITION BY id ORDER BY trnsctn_dt DESC ) rn FROM table1 WHERE trnsctn_dt >= CURDATE() ) a WHERE rn = 1 ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | -- 1. 분석함수 미지원 버전인 경우 SELECT a.id , a.trnsctn_dt , b.amt FROM ( SELECT id , MAX (trnsctn_dt) trnsctn_dt FROM table1 WHERE trnsctn_dt >= CURDATE() GROUP BY id ) a INNER JOIN table1 b ON a.id = b.id AND a.trnsctn_dt = b.trnsctn_dt ; |