我希望得到您的幫助。 我有一個名爲employee_details的表。它有四列:如何在過程中的單個查詢中合併5個查詢以減少執行時間
user_id VARCHAR2(255))
user_name(VARCHAR2(255))
nickname(VARCHAR2(255))
created_on(date)
現在我已經寫了5個手續單獨的查詢來獲取對誰期限sysdate-1
,sysdate-30
,sysdate-60
,sysdate-90
期間註冊/ created_on和sysdate
用戶的數據,但我想獲取這個數據只需一個查詢,可以減少程序的執行時間。請幫助我,如果需要更多詳細信息,請告訴我。
到目前爲止,我已經寫了下面的查詢:
1. SELECT COUNT (DISTINCT mth.user_id)
FROM employee_details mth
WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')
AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR')
- 90;
2. SELECT COUNT (DISTINCT mth.user_id)
FROM employee_details mth
WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')
AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR')
- 60;
3. SELECT COUNT (DISTINCT mth.user_id)
FROM employee_details mth
WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')
AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR')
- 30;
4. SELECT COUNT (DISTINCT mth.user_id)
FROM employee_details mth
WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')
AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR')
- 1;
5. SELECT COUNT (DISTINCT mth.user_id)
FROM employee_details mth
WHERE mth.created_on < TO_DATE (todate, 'DD/MM/RRRR')+1
AND mth.created_on >= TO_DATE (fromdate, 'DD/MM/RRRR');
其中fromdate
和todate
要由過程調用SYSDATE取代。
你嘗試過這麼遠嗎?你可以編輯添加您的查詢,因爲它目前站立?如果你能證明你正試圖解決問題,那麼人們可以以更有針對性的方式提供幫助,這個問題不會因爲「太寬泛」而關閉。 – 2015-04-01 10:07:16
謝謝 - 這使得它更清晰,並表明您正在積極研究這一點,而不僅僅是尋求某人爲您編寫代碼!另一個問題 - 你是否在所有5個子查詢中尋找不同用戶的單個計數,或者你是否在尋找每個子查詢的計數? – 2015-04-01 10:23:25
嗨,克里斯,我想單獨計數每個子查詢,但不應該有5個子查詢分開像上面的程序。我只想要像90這樣的東西是它最先取得的最大差異,然後是60取自90以上,不應該從表中取出。 – netdamin 2015-04-01 10:33:57