Oracle SQL - 从多个值的查询中选择最后更新的值
Oracle SQL - Pick last updated values from query for multiple values
我编写了以下有效的查询,但是有大量重复项。我只想为所有字段获取一组值。我想获得的值集是与 LAST_UPDATED.
中最新的 date/time 相对应的值
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)
Table 属性:
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
试试这个,将 /*list of fields on group*/
更改为要显示最后一个值的一组列。
我编写了以下有效的查询,但是有大量重复项。我只想为所有字段获取一组值。我想获得的值集是与 LAST_UPDATED 中最新的 date/time 相对应的值。
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
我编写了以下有效的查询,但是有大量重复项。我只想为所有字段获取一组值。我想获得的值集是与 LAST_UPDATED.
中最新的 date/time 相对应的值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)
Table 属性:
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
试试这个,将 /*list of fields on group*/
更改为要显示最后一个值的一组列。
我编写了以下有效的查询,但是有大量重复项。我只想为所有字段获取一组值。我想获得的值集是与 LAST_UPDATED 中最新的 date/time 相对应的值。
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