2011-09-30 55 views
1

我想問我的MySQL查詢是否有什麼問題(並且可能要求提供關於如何更好地執行此操作的建議)?我試圖在5天的範圍內生成每日報告......問題是它不顯示確切的數據,它填滿了沒有數據的日子。MySQL查詢錯誤...它不顯示確切的數據值

這是下面的MySQL查詢例子中: 在我的數據庫,週一,週三週四與DATAS ..但如果我將運行使用此查詢報告,週二將有一個現成的它在我的數據庫中實際上沒有的數據。雖然IT,NonIt合計表計數是正確的。我在計算僅在中的數據時出錯。請幫助我...我不知道錯誤在哪裏。

爲了更好地解釋我的意思,這裏是我的查詢的輸出結果的截圖: http://www.fileden.com/files/2011/7/27/3174077//daily.JPG

SELECT a.specialist_partner_ID, ss.first_name as SS, ssa.first_name as SSA 

,count(CASE WHEN a.receivedDate BETWEEN '2011-09-5' AND '2011-09-9' 
THEN a.job_order_number ELSE null END) As MON 

,count(CASE WHEN a.receivedDate BETWEEN date_add('2011-09-5', INTERVAL 1 DAY) 
AND DATE_ADD('2011-09-9', INTERVAL 1 DAY) THEN a.job_order_number ELSE null END) As TUE 

,count(CASE WHEN a.receivedDate BETWEEN date_add('2011-09-5', INTERVAL 2 DAY) 
AND DATE_ADD('2011-09-9', INTERVAL 2 DAY) THEN a.job_order_number ELSE null END) As WED 

,count(CASE WHEN a.receivedDate BETWEEN date_add('2011-09-5', INTERVAL 3 DAY) 
AND DATE_ADD('2011-09-9', INTERVAL 3 DAY) THEN a.job_order_number ELSE null END) As THU 

,count(CASE WHEN a.receivedDate BETWEEN date_add('2011-09-5', INTERVAL 4 DAY) 
AND DATE_ADD('2011-09-9', INTERVAL 4 DAY) THEN a.job_order_number ELSE null END) As FRI 

,count(case WHEN (a.receivedDate between '2011-09-5 00:00:00' and '2011-09-9 23:59:59' 
and jo.job_order_type LIKE 'IT') then a.job_order_number else null end) as IT 

,count(case WHEN (a.receivedDate between '2011-09-5 00:00:00' and '2011-09-9 23:59:59' 
and jo.job_order_type LIKE 'Non-IT') then a.job_order_number else null end) as NonIT 

,count(a.job_order_number) As Total FROM jo_partner a 

left join specialist_partner sp on a.specialist_Partner_ID = sp.specialistPartnerID  
left join staffing_specialist_asst ssa on sp.SSA_ID = ssa.SSA_ID 
left join staffing_specialist ss on sp.SS_ID = ss.SS_ID 
left join job_order jo on a.job_order_number = jo.job_order_number 
left join candidate_jo cjo on a.JO_partner_ID= cjo.jo_partner_ID 
left join candidate can on cjo.candidate_jo_ID= can.candidate_ID 
WHERE a.receivedDate BETWEEN '2011-09-5 00:00:00' AND '2011-09-9 23:59:59' 
GROUP BY a.specialist_partner_ID 
+0

你可以舉一些你的數據的例子嗎?在不知道數據是什麼樣的情況下調試您提供的查詢太困難了。 – invertedSpear

+0

嘗試在日期中使用「2011-09-05 00:00:00」,而不是「2011-09-5 00:00:00」。 –

+0

@invertedSpear感謝您的評論。示例結果在附上爵士的鏈接中。 –

回答

1

我想你錯了日期。對於每天的專欄,您從5天內選擇數據,這沒有意義。 因此,而不是:

count(CASE WHEN a.receivedDate BETWEEN date_add('2011-09-5', INTERVAL 1 DAY) 
AND DATE_ADD('2011-09-9', INTERVAL 1 DAY) THEN a.job_order_number ELSE null END) As TUE 

你應該有:

count(CASE WHEN a.receivedDate BETWEEN date_add('2011-09-5', INTERVAL 1 DAY) 
and DATE_ADD('2011-09-5', INTERVAL 2 DAY) THEN a.job_order_number ELSE null END) As TUE 

甚至更​​好:

count(CASE WHEN a.receivedDate >= date_add('2011-09-5', INTERVAL 1 DAY) 
and a.receivedDate < DATE_ADD('2011-09-5', INTERVAL 2 DAY) THEN a.job_order_number ELSE null END) As TUE 

同爲天的休息。

+0

DavidEG在嘗試了您的建議後,我會從週二到週五得到正確的值。我現在的問題是,**星期一**,是不顯示正確數據的那個......它仍然填滿了數字,儘管他們沒有。 –

+0

@Alvin你有沒有檢查你有正確的日期?星期一應該像其餘的日子:) – DavidEG

+0

是先生..這是我對星期一的查詢.. ** count(CASE當一個'2011-10-3'和'2011-10-07'之間的收到日期' THEN a.job_order_number ELSE null END)由於MON **是我的查詢正確的先生?謝謝 –