2012-01-18 8 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と関係していると思います。私はdms_random.valueの上に "end"で注文してみましたが、どちらも動作するようには見えません - 両方のコード例が実行されますが、日付順に返されないようです。ぼんやりとした何かが欠落しているかどうかはわかりませんが、どんなアイデアも高く評価されます。

ありがとうございました。

編集:

奇妙な話、この作品:

だから、
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 

最後の閉じ括弧は何も一致しません。したがって、何かが正しくありません。例:私は一緒に投げた:

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 

外側の順序で指定された順序でサンプルテーブルからランダムIDを10個戻しました。

+0

元の質問に完全なクエリを含めるように更新しました。おそらく、問題を引き起こしているものを取り除いたものがあります。それでも私のクエリのように私には不正な括弧がありますが、それはクエリを実行しています。もし私がその不法な括弧を取り除くと、私は誤りを起こす。それは遅くなっているかもしれないので、私は二重チェックし、私はそれを把握することができますかどうかを確認します。しかし、少なくとも私はそれがうまくいくはずです。 – bawpie

+0

ちょうどもう1つの「明白な」1つ、End列をチェックするのは日付であり、varcharではありませんか? – Andrew

+0

私はそれが終わりの列と関係があると思っています。それは日付として定義されています。to_dateでラップしようとすると、 '私はちょうど開いた日を見て、その上で順序を行うためにそこに数を残すことができることを知っているので、今のためにする必要があります! – bawpie