2012-01-18 52 views
0

我這是寫在Oracle SQL下面的查詢:使用DBMS_RANDOM.VALUE和按日期排序...的Oracle SQL

SELECT 
"P No","Name","Type","AID","Start","End","Day Ended","Worker","Team","Outcome" 
FROM 
(SELECT 
O_ASSESSMENTS.ASM_SUBJECT_ID as "P No", 
olm_bo.get_name(O_ASSESSMENTS.ASM_SUBJECT_ID,O_ASSESSMENTS.ASM_SUBJECT_IND) as "Name", 
O_QUESTION_SET_APPLICATIONS.QSA_DESC as "Type", 
O_ASSESSMENTS.ASM_ID as "AID", 
O_ASSESSMENTS.ASM_START_DATE as "Start", 
O_ASSESSMENTS.ASM_END_DATE as "End", 
TO_CHAR(O_ASSESSMENTS.ASM_END_DATE, 'Day') as "Day Ended", 
olm_bo.get_org_name(assessment_worker.RES_PARTY_OUN_ID) as "Worker", 
olm_bo.get_per_name(assessment_worker.RES_PARTY_ID) as "Team", 
olm_bo.get_ref_desc(O_ASSESSMENTS.ASM_OUTCOME,'ASM_OUTCOME') as "Outcome" 
FROM 
O_QUESTION_SET_APPLICATIONS, 
O_RESPONSIBILITIES assessment_worker, 
O_ASSESSMENTS 
WHERE 
(assessment_worker.RES_REC_ID(+)=O_ASSESSMENTS.ASM_ID AND assessment_worker.RES_REC_TYPE (+)='ASM' AND assessment_worker.RES_END_DATE IS NULL ) 
AND (O_QUESTION_SET_APPLICATIONS.QSA_ID=O_ASSESSMENTS.ASM_QSA_ID ) 
AND 
(olm_bo.get_org_name(assessment_worker.RES_PARTY_OUN_ID) = 'TEAM' 
    AND 
    olm_bo.get_ref_desc(O_ASSESSMENTS.ASM_OUTCOME,'ASM_OUTCOME') IN ('No Further Action') 
    AND 
    O_ASSESSMENTS.ASM_END_DATE Is Not Null 
    AND 
    O_QUESTION_SET_APPLICATIONS.QSA_ID IN ('TYPE1' ) 
    AND 
    O_ASSESSMENTS.ASM_END_DATE >= trunc(sysdate-7) 
) 
ORDER BY 
    dbms_random.value) 
WHERE ROWNUM <= 30 
ORDER BY "End" DESC 

基本上它是返回已在過去一週被關閉關閉評估,並且dbms_random.value返回30個隨機記錄。不過,我還想按結束日期的降序對最終輸出進行排序。然而,這似乎並沒有工作,我想這與dbms_random.value有關。我已經試過把「end」放在dms_random.value上面,但是看起來並不工作 - 兩個代碼的例子都會運行,但是它們看起來並沒有按日期順序返回。不知道我是否失去了任何盲目顯而易見的東西,但任何想法都將非常感激。

謝謝。

編輯:

奇怪的是,這個工程:

SELECT * FROM 
(SELECT 
    O_ASSESSMENTS.ASM_SUBJECT_ID as "P_No", 
    olm_bo.get_name(O_ASSESSMENTS.ASM_SUBJECT_ID,O_ASSESSMENTS.ASM_SUBJECT_IND) as "Name", 
    O_QUESTION_SET_APPLICATIONS.QSA_DESC as "Type", 
    O_ASSESSMENTS.ASM_ID as "AID", 
    O_ASSESSMENTS.ASM_START_DATE as "Start", 
    O_ASSESSMENTS.ASM_END_DATE as "End", 
TO_CHAR(O_ASSESSMENTS.ASM_END_DATE, 'Day') as "Day_Ended", 
    olm_bo.get_org_name(assessment_worker.RES_PARTY_OUN_ID) as "Team", 
    olm_bo.get_per_name(assessment_worker.RES_PARTY_ID) as "Worker", 
    olm_bo.get_ref_desc(O_ASSESSMENTS.ASM_OUTCOME,'ASM_OUTCOME') as "Outcome" 
FROM 
    O_QUESTION_SET_APPLICATIONS, 
    O_RESPONSIBILITIES assessment_worker, 
    O_ASSESSMENTS 
WHERE 
    (assessment_worker.RES_REC_ID(+)=O_ASSESSMENTS.ASM_ID AND assessment_worker.RES_REC_TYPE(+)='ASM' AND assessment_worker.RES_END_DATE IS NULL ) 
    AND (O_QUESTION_SET_APPLICATIONS.QSA_ID=O_ASSESSMENTS.ASM_QSA_ID ) 
    AND 
    (nvl(olm_bo.get_org_name(assessment_worker.RES_PARTY_OUN_ID),'NULL') = 'TEAM' 
    AND 
    nvl(olm_bo.get_ref_desc(O_ASSESSMENTS.ASM_OUTCOME,'ASM_OUTCOME'),'NULL') IN ('CONTACT ONLY - all actions complete','No Further Action' ) 
    AND 
    O_ASSESSMENTS.ASM_END_DATE Is Not Null 
    AND 
    nvl(O_QUESTION_SET_APPLICATIONS.QSA_ID,'NULL') IN ('TYPE1') 
    AND 
    O_ASSESSMENTS.ASM_END_DATE >= trunc(sysdate-7) 
) 
ORDER BY 
    dbms_random.value) 
WHERE ROWNUM <= 30 
ORDER BY "End" DESC 

所以不知道是否有在原來代碼中的故障,或者說已經改變,使其工作...

回答

2

敲開一個簡單的例子工作正常,所以明確地檢查你的SQL,由於你做了可能的編輯,在帖子中似乎有問題。我已經縮短了它的清晰度。

SELECT * 
FROM 
    (
    SELECT 
     "P No","Name","Type","AID","Start" 
     ,"End","Day Ended","Worker","Team","Outcome" 
    FROM O_ASSESSMENTS 
    WHERE 
    O_ASSESSMENTS.ASM_END_DATE Is Not Null 
    AND 
     nvl(O_QUESTION_SET_APPLICATIONS.QSA_ID,'NULL') IN ('TYPE1') 
    AND 
    O_ASSESSMENTS.ASM_END_DATE >= trunc(sysdate-7) 
    ) 
ORDER BY 
dbms_random.value 

) 
WHERE ROWNUM <= 30 
ORDER BY "End" DESC 

最終的右括號什麼都不匹配,所以有些東西不太對。示例I扔在一起:

select a.test_id 
from 
(
select test_id 
from tbl_Test 
order by dbms_random.value 
) a 
where rownum <= 10 
order by a.test_id 

從外部排序中指定的順序從示例表中取回10個隨機ID。

+0

我已經更新了我的原始問題以包括完整的查詢,因爲也許有我剝離出來的問題。它仍然看起來像我的查詢中,雖然有一個流氓支架,但它正在運行查詢。如果我拿出那個流氓支架,我會得到一個錯誤。可能是因爲它遲到了,所以我會仔細檢查一下,看看我能否弄清楚。感謝您的迴應,但至少我知道它'應該'工作。 – bawpie 2012-01-18 17:45:56

+0

只需要檢查另一個'顯而易見的',End列是日期而不是varchar? – Andrew 2012-01-18 18:31:17

+0

我開始認爲這是與'結束'列有關 - 它被定義爲一個日期,如果我試圖把它包裝在to_date中,我會在轉換整個輸入字符串之前得到一個關於日期格式圖片結尾的錯誤」。我知道我可以在那裏堅持一個計數來看待開放日期並按照這個順序進行排序,所以現在可能要做的事情! – bawpie 2012-01-19 09:00:04