これは以前stackoverflow(Returning nearest date to date in a different table)で解決されたクエリから続きますが、今後はさらに開発したいと考えています。追加のテーブル情報を含む複数のテーブルから関連する日付を返す
私が持っているSQLはこれです:
SELECT *
FROM (SELECT O_ASSESSMENTS.ASM_SUBJECT_ID as "P Number",
O_ASSESSMENTS.ASM_ID as "Assessment ID",
O_ASSESSMENTS.ASM_START_DATE as "Assessment Start",
O_ASSESSMENTS.ASM_END_DATE as "Assessment End",
O_SERVICE_EVENTS.SEV_ID as "Event ID",
O_SERVICE_EVENTS.SEV_ACTUAL_DATE as "Event Start",
O_SERVICE_EVENTS.SEV_OUTCOME_DATE as "Event End",
ROUND(O_ASSESSMENTS.ASM_START_DATE -O_SERVICE_EVENTS.SEV_ACTUAL_DATE,0) as "Likely",
row_number() over(PARTITION BY O_ASSESSMENTS.ASM_ID
ORDER BY abs(O_ASSESSMENTS.ASM_START_DATE - O_SERVICE_EVENTS.SEV_ACTUAL_DATE))as "Row Number"
FROM O_ASSESSMENTS
JOIN O_SERVICE_EVENTS
ON O_ASSESSMENTS.ASM_SUBJECT_ID = O_SERVICE_EVENTS.SEV_SUBJECT_ID
Where O_SERVICE_EVENTS.SEV_CODE IN ('ICS_E3','CPINVEST') AND
O_ASSESSMENTS.ASM_QSA_ID IN ('AA1329','AA521'))
WHERE "Row Number" = 1
は基本的に、我々は二つのテーブルがある - o_assessmentsとo_service_eventsを、このSQLは評価に最寄りのサービスイベントを返しています。ここでは、より複雑な情報をクエリに追加して、エンドユーザーにとってより便利なもの、つまりチーム名とワーカー名を追加したいと考えています。
残念ながら、チームとワーカーは別のテーブル(o_responsibilities)に再度あり、as_idからres_rec_idへのo_assessmentsにリンクされています。
問題は、私は実際にどのように上記のSQLにこのテーブルを呼び出すか分からない - ので、任意のアドバイスは本当に感謝します!
「可能性のある」フィールドに0の差がある場合にのみ、対応するイベントを返すように既存のクエリを調整することも可能かどうか疑問に思っていました。私はどこにそれを追加することができます知っているが、私は
and "Likely" = 0
行を追加する場合にのみ(イベントに対応することなく、すなわちアセスメント)すべての問題を強調しませんイベント、との評価を返します。
私はSQLですべての時間を学んでいますが、現時点では私のことを本当に超えているようなものがたくさんあるので、アドバイスをいただければ幸いです。元のクエリを修正するか、新しいクエリを開始するかはわかりませんでしたので、誤ってルールを侵害していないことを願っています。
編集:
さて、マルコソリューション以下、これは私が働いているものです。
SELECT
*
FROM
(SELECT
OAS.ASM_SUBJECT_ID as "P Number",
OAS.ASM_ID as "Assessment ID",
OAS.ASM_START_DATE as "Assessment Start",
OAS.ASM_END_DATE as "Assessment End",
OAS.ASM_AUTH_DATETIME as "Authorisation Date",
nvl(olm_bo.get_ref_desc(OAS.ASM_OUTCOME,'ASM_OUTCOME'),'') as "Outcome",
nvl(olm_bo.get_org_name(ORE.RES_PARTY_OUN_ID),'') as "Team",
nvl(olm_bo.get_per_name(ORE.RES_PARTY_ID),'') as "Worker",
OSE.SEV_ID as "Event ID",
OSE.SEV_ACTUAL_DATE as "Event Start",
OSE.SEV_OUTCOME_DATE as "Event End",
ROUND(OAS.ASM_START_DATE -OSE.SEV_ACTUAL_DATE,0) as "Likely",
row_number() over(PARTITION BY OAS.ASM_ID
ORDER BY
abs(OAS.ASM_START_DATE - OSE.SEV_ACTUAL_DATE))as "Row Number"
FROM O_ASSESSMENTS OAS
INNER JOIN O_RESPONSIBILITIES ORE ON OAS.ASM_ID = ORE.RES_REC_ID
AND ORE.RES_PARTY_OUN_ID = 'TEAM'
LEFT JOIN O_SERVICE_EVENTS OSE ON OAS.ASM_SUBJECT_ID = OSE.SEV_SUBJECT_ID
AND
OSE.SEV_CODE IN ('EVENT')
AND
ROUND(OAS.ASM_START_DATE - OSE.SEV_ACTUAL_DATE,0) >= -7
AND
ROUND(OAS.ASM_START_DATE - OSE.SEV_ACTUAL_DATE,0) <= 7
Where OAS.ASM_QSA_ID IN ('ACODE')
AND
nvl(olm_bo.get_ref_desc(OAS.ASM_OUTCOME,'ASM_OUTCOME'),'') <> 'Abandon') WHERE "Row Number" = 1
はインナーセレクトから欠けていますか?具体的には、結合の周りに... "AND"の後に "SYNTAX"エラーが発生するはずの "WHERE"があります。 – xQbert
申し訳ありませんが、コードを操作して間違ったコピーを...間もなくコピーしました! – bawpie