2016-06-22 10 views
1

次のクエリは動作しますが、重複があります。私はすべてのフィールドの値のセットを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*/を変更し、これを試してみてください最後の値を表示します。

私は、動作する次のクエリを書いていますが、重複がたくさんあります。私はすべてのフィールドの値のセットを1つだけ取得したいと考えています。私が得たい値のセットは、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

関連する問題