2016-06-22 1 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