Oracle 사례 페이지 조회 및 그룹 정렬
KM_REVIEW_MAIN: 프로 세 스 메 인 테이블
필드 DOCSUBJECT,DOC_CREATE_TIME (프로 세 스 생 성 시간), DOCCREATOR_ID (즉 SUBMITTER), FDDEPARTMENT_ID (제출 자 부서), DOCSTATUS,
DOC_상태 대응:
-- 10 초고 11 기각 -- 00 폐기 / 제출 자가 자발적으로 취소 - 20 대기 중 -- 30 끝나다
IT_REQUEST_COMPLETION_DETAIL: 프로 세 스 기록 표
모든 프로 세 스 상태 가 변 할 때 이 표 에 한 번 씩 기록 합 니 다. 관련 조건: ITREQUEST_COMPLETION_DETAIL.FD_PROCESS_ID = KM_REVIEW_MAIN.FD_ID
기록 FDPROCESS_ID 에 대응 하 는 FDCREATE_TIME,FD_STATUS,FD_HANDLER_ID 처리 자,
모든 FDPROCESS_ID 가 여러 개 다른 FDCREATE_TIME,FD_STATUS, 가장 늦 은 FDSTATUS, 최신 상태 입 니 다.
정상 절차: 대기 (또는 기각) -- > 수리 되 었 습 니 다 -- > 요청 완료 -- > 신청자 확인 완료,
이미 수리, 대기, 문제 세 가지 상태 로 통 계 를 요구 하 다.
상태 대응:
기다 림
--- 200 수리
--- 300 신청자 확인 완료
질문
--- 600 요청 완료
--- 기타 미 지
IT_REQUEST_PLAN_타임 계획 완료 시간표
필드:
FD_PROCESS_ID, 즉 KMREVIEW_MAIN 의 FDID
FD_CREATE_TIME, 이 메시지 생 성 시간
FD_PLAN_FINISH_TIME, 계획 완료 시간
KM_REVIEW_MAIN_PROPERTY 프로 세 스 유형 표
필드:
FD_DOC_ID, 즉 KMREVIEW_MAIN 의 FDID
FD_PROPERTY_ID, 프로 세 스 유형,
테스트 서버 - 내부 수요: 16c55f20f811ce47da6b70e418192f 67
테스트 서버 - 외부 수요: 16c5165 a9805ef77b491b074e2a8f63b
SYS_ORG_ELEMENT 직원 정보 표
필드
FD_ID (유일한 ID), FDNAME (이름), FDNO (작업 번호)
SQL 구문
SELECT
T.*,
CEIL(TOTAL_NUM / 10 ) TOTAL_PAGE
FROM(
SELECT
S.*,
COUNT(*) OVER() TOTAL_NUM,
ROWNUM RNUM
FROM(
SELECT
M.FD_ID PROCESS_ID,
M.DOC_SUBJECT SUBJECT,
SOE.FD_ID SUBMITTER_ID,
SOE.FD_NAME SUBMITTER_NAME,
CASE P.FD_PROPERTY_ID
WHEN '16c55f20f811ce47da6b70e418192f67' THEN ' '
WHEN '16c5165a9805ef77b491b074e2a8f63b' THEN ' '
ELSE ' '
END AS TYPE,
TO_CHAR(M.DOC_CREATE_TIME,'YYYY-MM-DD') SUBMIT_TIME,
SOE2.FD_ID DEPARTMENT_ID,
SOE2.FD_NAME DEPARTMENT_NAME,
SOE1.FD_ID HANDLER_ID,
SOE1.FD_NAME HANDLER_NAME,
TO_CHAR(PT.FD_PLAN_FINISH_TIME,'YYYY-MM-DD') PLAN_FINISH_TIME,
D.FD_STATUS STATUS_NO,
CASE D.FD_STATUS
WHEN '100' THEN ' '
WHEN '200' THEN ' '
WHEN '404' THEN ' '
WHEN '600' THEN ' '
WHEN '300' THEN ' '
ELSE ' '
END AS STATUS,
D.FD_CREATE_TIME FD_CREATE_TIME,
-- ID , 、
ROW_NUMBER() OVER(
PARTITION BY D.FD_PROCESS_ID
ORDER BY D.FD_CREATE_TIME DESC, D.FD_STATUS * 1 DESC
) AS RN
FROM KM_REVIEW_MAIN M
LEFT JOIN SYS_ORG_ELEMENT SOE ON SOE.FD_ID = M.DOC_CREATOR_ID
LEFT JOIN IT_REQUEST_COMPLETION_DETAIL D ON D.FD_PROCESS_ID = M.FD_ID
LEFT JOIN IT_REQUEST_PLAN_TIME PT ON PT.FD_PROCESS_ID = M.FD_ID
LEFT JOIN KM_REVIEW_MAIN_PROPERTY P ON P.FD_DOC_ID = M.FD_ID
LEFT JOIN SYS_ORG_ELEMENT SOE1 ON SOE1.FD_ID = D.FD_HANDLER_ID
LEFT JOIN SYS_ORG_ELEMENT SOE2 ON SOE2.FD_ID = SOE1.FD_PARENTID
WHERE D.FD_STATUS IN ('100','200','404','600','300')
) S
WHERE RN = '1'
) T
WHERE
RNUM > 0*10 AND RNUM < 1*10
--
AND TO_DATE(SUBMIT_TIME,'YYYY-MM-DD') >= TRUNC(SYSDATE,'IW')
AND TO_DATE(SUBMIT_TIME,'YYYY-MM-DD') < TRUNC(SYSDATE+7,'IW')
--
AND SUBSTR(SUBMIT_TIME,1,7) = TO_CHAR(SYSDATE,'YYYY-MM')
-- ~
AND TO_DATE(SUBMIT_TIME,'YYYY-MM-DD') >= TO_DATE('2019-08-01','YYYY-MM-DD')
AND TO_DATE(SUBMIT_TIME,'YYYY-MM-DD') < TO_DATE('2019-08-20','YYYY-MM-DD')
AND SUBMITTER_ID = '16437e3e2c29277f392d75c41d29574a'
AND TYPE = ' '
AND DEPARTMENT_ID = '163e57e1db53402ec4897c04713a400b'
AND STATUS = ' ';
질문 1: 그룹 정렬
KM_REVIEW_MAIN 의 FDID, 대응 ITREQUEST_COMPLETION_DETAIL 의 여러 기록,
요구 에 따라 FDID 그룹, 각 그룹 FDID 의 여러 개의 기록 을 시간, 번호 에 따라 정렬 합 니 다.
그룹 정렬 방법 1
왼쪽 외부 연결 조회, 다 차원 정렬,
우선 정렬: M. FDID,
재 정렬: D. FD 에 따라CREATE_TIME DESC, D.FD_STATUS * 1 DESC
단순히 D. FD 만 누 르 면CREATE_TIME 정렬, 오류 가 발생 할 수 있 습 니 다. 이 프로 세 스 의 기록 은 다른 프로 세 스 의 기록 과 삽입 되 어 나타 납 니 다.
SELECT M.FD_ID PROCESS_ID, D.FD_STATUS STATUS_NO, D.FD_CREATE_TIME FROM KM_REVIEW_MAIN M LEFT JOIN IT_REQUEST_COMPLETION_DETAIL D ON D.FD_PROCESS_ID = M.FD_ID ORDER BY M.FD_ID, D.FD_CREATE_TIME DESC, D.FD_STATUS * 1 DESC
패 킷 정렬 방법 2
번 호 를 동시에 정렬 하고 번 호 를 매 길 때 사용한다. PARTITION BY 조별, 사용 ORDER BY 정렬,
SELECT M.FD_ID PROCESS_ID, D.FD_STATUS STATUS_NO, D.FD_CREATE_TIME, ROW_NUMBER() OVER( PARTITION BY D.FD_PROCESS_ID ORDER BY D.FD_CREATE_TIME DESC, D.FD_STATUS * 1 DESC ) AS RN FROM KM_REVIEW_MAIN M LEFT JOIN IT_REQUEST_COMPLETION_DETAIL D ON D.FD_PROCESS_ID = M.FD_ID
문제 2: 최신 상태 코드 를 가 져 옵 니 다.
하나의 프로 세 스 는 여러 개의 프로 세 스 기록 에 대응 하고 마지막 프로 세 스 기록 을 최신 상태 로 해 야 합 니 다.
사고: 모든 절차 기록 을 취하 고 시간 에 따라 거꾸로 배열 한 후에 번 호 를 매 긴 다음 에 외부 조회 에서 번 호 를 1 로 기록 합 니 다.
내부 조회
ROW_NUMBER() OVER( PARTITION BY D.FD_PROCESS_ID ORDER BY D.FD_CREATE_TIME DESC, D.FD_STATUS * 1 DESC ) AS RN
외부 조회 선별 번호 1 의
WHERE RN = '1'
질문 3: 페이지 별 조회
먼저 내부 조회 문 에서 각 기록 번 호 를 주 고 총 기록 수량 을 조회 합 니 다.
SELECT S.*, COUNT(*) OVER() TOTAL_NUM, ROWNUM RNUM
페이지 크기 = 10, 즉 페이지 당 10 개의 기록 을 보 여 준다 고 가정 하면 페이지 수 = TOTAL NUM / 10 을 위로 조정 하고 TOTAL NUM 이 65 이면 총 페이지 수 는 7 이다.
외부 조회 시 총 페이지 수 를 찾 아 보고 번 호 를 보 여줄 페이지 범위 에 한정 합 니 다.
SELECT T.*, CEIL(TOTAL_NUM / 10 ) TOTAL_PAGE FROM( SELECT S.*, COUNT(*) OVER() TOTAL_NUM, ROWNUM RNUM FROM (***)S )T WHERE RNUM > 0*10 AND RNUM < 1*10
질문 4: 이번 주 데이터 조회
AND TO_DATE(SUBMIT_TIME,'YYYY-MM-DD') >= TRUNC(SYSDATE,'IW') AND TO_DATE(SUBMIT_TIME,'YYYY-MM-DD') < TRUNC(SYSDATE+7,'IW')
TRUNC (SYSDATE, 'IW') 는 이번 주 월요일 을 조회 하 는 00: 00: 00 입 니 다. 일요일 은 이번 주 마지막 날 입 니 다.
TRUNC (SYSDATE + 7, 'IW') 는 다음 주 1 일 을 조회 하 는 00: 00: 00 입 니 다.
질문 5: 이번 달 데이터 조회
AND SUBSTR(SUBMIT_TIME,1,7) = TO_CHAR(SYSDATE,'YYYY-MM')
문제 6: 같은 표 의 다른 조건 의 필드 를 같은 줄 에 놓 습 니 다.
SELECT A.*, B1. 필드 1, B2. 필드 2 FROM A LEFT JOIN B AS B1 ON B1.ID = A.ID LEFT JOIN B AS B2 ON B2.ID = A.FID
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.