2016-06-22 3 views
1

작동하는 다음 쿼리를 작성했지만 많은 중복이 있습니다. 모든 필드에 대해 하나의 값 집합을 얻고 싶습니다. 내가 얻으려는 값 세트는 LAST_UPDATED의 최신 날짜/시간에 해당하는 것입니다.Oracle SQL - 여러 값에 대한 쿼리의 최종 업데이트 값 선택

SELECT 
nb_policy.LAST_UPDATED 
nb_policy.POLICY_ID, 
nb_policy.POLICY_NAME, 
customer.NAME, 
customer.VANTIVE_ID, 
customer.SIEBEL_ID, 
NBRP.JOB.JOB_ID, 
NBRP.JOB.JOB_TYPE, 
NBRP.JOB.JOB_STATE, 
NBRP.JOB.SCHEDULE_NAME, 
NBRP.JOB.SCHEDULE_TYPE, 
NBRP.JOB.KBYTES, 
NBRP.JOB.BACKUP_TYPE 
FROM nb_policy 
LEFT JOIN customer 
ON nb_policy.CUSTOMER_ID = customer.CUSTOMER_ID 
RIGHT JOIN NBRP.JOB 
ON nb_policy.POLICY_NAME = NBRP.JOB.CLASS_NAME 
WHERE customer.ACTIVE = 1 AND (customer.VANTIVE_ID > 0 OR customer.SIEBEL_ID > 0) 

표 속성 :

customer.NAME - VARCHAR2 
customer.VANTIVE_ID - VARCHAR2 
customer.SIEBEL_ID - VARCHAR2 
customer.ACTIVE - NUMBER 
nb_policy.LAST_UPDATED - CHAR 
nb_policy.POLICY_ID - CHAR 
nb_policy.POLICY_NAME - VARCHAR2 
NBRP.JOB.JOB_ID - NUMBER 
NBRP.JOB.JOB_TYPE - NUMBER 
NBRP.JOB.JOB_STATE - NUMBER 
NBRP.JOB.SCHEDULE_NAME - VARCHAR2 
NBRP.JOB.SCHEDULE_TYPE - NUMBER 
NBRP.JOB.KBYTES - NUMBER 
NBRP.JOB.BACKUP_TYPE - NUMBER 

베르 첼리 당 코드를 편집 한 후 나는 오류가 발생하고 있습니다 : SQL 오류 [1722] [42000]가 : ORA-01722 : 올바르지 않은 숫자가 아래

입니다 베르 첼리의 코드 :

SELECT * 
FROM (SELECT nb_policy.last_updated, 
       nb_policy.policy_id, 
       nb_policy.policy_name, 
       customer.name, 
       customer.vantive_id, 
       customer.siebel_id, 
       nbrp.job.job_id, 
       nbrp.job.job_type, 
       nbrp.job.job_state, 
       nbrp.job.schedule_name, 
       nbrp.job.schedule_type, 
       nbrp.job.kbytes, 
       nbrp.job.backup_type, 
       Row_number() 
       over ( 
        PARTITION BY nb_policy.last_updated, nb_policy.policy_id, 
       nb_policy.policy_name, customer.name, customer.vantive_id, 
       customer.siebel_id, 
       nbrp.job.job_id, nbrp.job.job_type, nbrp.job.job_state, 
       nbrp.job.schedule_name, 
       nbrp.job.schedule_type, nbrp.job.kbytes, nbrp.job.backup_type 
        ORDER BY nb_policy.last_updated DESC) AS rn 
     FROM nb_policy 
       left join customer 
         ON nb_policy.customer_id = customer.customer_id 
       right join nbrp.job 
         ON nb_policy.policy_name = nbrp.job.class_name 
     WHERE customer.active = 1 
       AND (customer.vantive_id > 0 
         OR customer.siebel_id > 0)) t 
WHERE rn = 1 

답변

2

원하는 열 세트 /*list of fields on group*/ 변경이 시도 마지막 값을 표시합니다.

다음과 같은 쿼리가 작동하지만 필자는 중복이 많습니다. 모든 필드에 대해 하나의 값 집합을 얻고 싶습니다. 내가 얻으려는 값 세트는 LAST_UPDATED의 최신 날짜/시간에 해당하는 것입니다.

SELECT * 
FROM (SELECT nb_policy.last_updated, 
       nb_policy.policy_id, 
       nb_policy.policy_name, 
       customer.name, 
       customer.vantive_id, 
       customer.siebel_id, 
       nbrp.job.job_id, 
       nbrp.job.job_type, 
       nbrp.job.job_state, 
       nbrp.job.schedule_name, 
       nbrp.job.schedule_type, 
       nbrp.job.kbytes, 
       nbrp.job.backup_type, 
       Row_number() 
       over ( 
        PARTITION BY nb_policy.last_updated, nb_policy.policy_id, 
       nb_policy.policy_name, customer.name, customer.vantive_id, 
       customer.siebel_id, 
       nbrp.job.job_id, nbrp.job.job_type, nbrp.job.job_state, 
       nbrp.job.schedule_name, 
       nbrp.job.schedule_type, nbrp.job.kbytes, nbrp.job.backup_type 
        ORDER BY nb_policy.last_updated DESC) AS rn 
     FROM nb_policy 
       left join customer 
         ON nb_policy.customer_id = customer.customer_id 
       right join nbrp.job 
         ON nb_policy.policy_name = nbrp.job.class_name 
     WHERE customer.active = 1 
       AND (customer.vantive_id > 0 
         OR customer.siebel_id > 0)) t 
WHERE rn = 1 
+0

나는 그것을 시도하고 오류 코드 933을 받았습니다. 코드를 게시 하겠지만이 사이트는 너무 길다 고 말합니다. – JDG

+0

@JDG 질문으로 사용 된 코드를 게시하십시오. 구문 오류는 – vercelli

+0

입니다. 여기에 코드를 게시했습니다. https://shrib.com/ndZBVgdDWAA5sdQ – JDG