Oracle SQL-从多个值的查询中选择上次更新的值

Oracle SQL-从多个值的查询中选择上次更新的值,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我已经编写了下面的查询,但是有大量重复的查询。我只想为所有字段获取一组值。我想得到的一组值是与上次更新的最新日期/时间相对应的值 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

我已经编写了下面的查询,但是有大量重复的查询。我只想为所有字段获取一组值。我想得到的一组值是与上次更新的最新日期/时间相对应的值

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)
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 
表属性:

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
根据vercelli编辑代码后,我收到错误:SQL错误[1722][42000]:ORA-01722:无效数字

下面是vercelli的代码:

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

尝试此操作,为要显示最后一个值的列集更改组*/上的
/*字段列表

我已经编写了下面的查询,但是有大量重复的查询。我只想为所有字段获取一组值。我想得到的一组值是与上次更新的最新日期/时间相对应的值

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)
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 

我试过了,收到了一个错误代码933。我想发布代码,但是这个网站说它太长了。@JDG请发布用作问题的代码。有一个语法错误这是我在这个网站上的第一天,他们不允许我发布另一个问题,因为人们对这个帖子投了反对票。@JDG看不到代码中有任何错误。上次更新的_属于哪个表?@JDG I从
as t
中删除了
as
。立即尝试(对不起,我现在正在使用手机)