我有一個表名是ProductDirection。它包括這些列。Oracle sql如果在選擇語句中有條件或分組依據
- 操作代碼
- messagecode
- productno
- messages_info
- 的StatusCode
- insertdate
我有一個批處理程序,該程序工作最大。一天產品3次。如果某一產品的操作成功批次,當天批次不適用於該產品。所以程序工作的同時它會成功並插入記錄失敗或成功。
我的記錄是:
ProductNo StatusCode MessagesInfo InsertDate
---------------------------------------------------------
1236895 0 Fail For xxx 01.01.2013 10:00:00
1236895 0 Fail For yyy 01.01.2013 15:00:00
1236895 1 Success 01.01.2013 19:00:00
1236895 0 Fail For xxx 15.01.2013 10:00:00
1236895 0 Fail For yyy 15.01.2013 15:00:00
1236895 0 Fail For zzz 15.01.2013 19:00:00
我想這個條件。如果它有可用的成功記錄,我只想在一天內獲得該記錄,並且如果所有記錄都在一天內失敗。所以我的記錄看起來像這樣。
ProductNo StatusCode MessagesInfo InsertDate
------------------------------------------------------
1236895 1 Success 01.01.2013 19:00:00
1236895 0 Fail For xxx 15.01.2013 10:00:00
1236895 0 Fail For yyy 15.01.2013 15:00:00
1236895 0 Fail For zzz 15.01.2013 19:00:00
我該如何解決?
SELECT *
FROM ProductDirection p
WHERE p.operationcode = 6
AND p.messagecode = 2
AND trunc(p.insertdate) BETWEEN '01.01.2013' AND '21.06.2013';
謝謝你的回答,並抱歉我遲到的迴應。我有索引productdirection table.Index包括insertdate,...(來自where條件列)。這個查詢的成本是非常昂貴的trunc(insertdate)。我怎樣才能減少這個查詢?你能提供任何解決方案嗎? – engcmreng
@engcmreng,更新了答案和sqlfiddle。這應該會降低查詢的成本。 – Noel
感謝您的幫助。 – engcmreng