데이터 정렬 관련해서 질문하나 드립니다 0 4 3,776

by 손님 order by grouping [2009.08.17 14:37:24]


안녕하세요.

================================================
proc_date | proc_time | id | data....
================================================
20090301    121321001   D    ...
20090301    121311001   D    ...
20090301    121305001   R    ...
20090301    121301001   D    ...
20090301    121201001   R    ...
20090301    121201001   R    ...
================================================

위와 같은 데이터가 있을 때, 가장 최근에 것을 최상위로 정렬하되, id끼리 묶어서 보여주고 싶습니다.

단순한 order by로는 해결이 되지 않네요.
proc_date, proc_time, id 순서대로 할경우는 id가 묶여지지 않고
proc_date, id, proc_time 순서대로 정렬 할경우는 가장 최근에 실행한건 D인데 R이 위에 올라갈테구요.

좋은 방법이 있을 까요?

by 러드 [2009.08.17 14:46:23]
분석함수 찾아보세요!!!

by 마농 [2009.08.17 14:58:10]
ORDER BY MAX(proc_date || proc_time) OVER(PARTITION BY id) DESC, id, proc_date DESC, proc_time DESC

by 손님 [2009.08.17 15:30:50]
러드님, 마농님 감사합니다.
그런데 일단 oracla 포럼에 올리긴 했는데요, 어느 정도 db에 종속적이지 않은 방법은 없을까요?

by 마농 [2009.08.17 15:49:58]
id별 max(일시)를 우선 따로 구한후 조인하여 정렬하시면 됩니다.
SELECT a.*
FROM 테이블 a,
(
SELECT id, MAX(proc_date || proc_time) max_dt
FROM 테이블
GROUP BY id
) b
WHERE a.id = b.id
ORDER BY b.max_dt DESC, a.id, a.proc_date DESC, a.proc_time DESC
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입