2014-03-03 90 views
1

我有一個表格,格式如下。簡化記錄計數查詢

FIELD   TYPE   DATA EXAMPLE 
---------------------------------------------- 
id   | int(11)  | 123 
job   | int(7)  | 456 
date   | datetime | 0000-00-00 00:00:00 
complete  | tinyint(4) | 0 or 1 

我需要編寫一個查詢,會雖然這大表和計算多少每個項目的每日記錄與完整狀態0和完整狀態1.

因爲可能在同一天的多個條目,我首先想到的運行一個查詢並獲得獨特的日期:

SELECT DISTINCT DATE(date) AS dt 
FROM mytable 
ORDER BY DATE(date) ASC 

,然後運行中的另一個查詢並執行數

SELECT 
    SUM(id) AS cnt, 
    job, 
    DATE(date) 
FROM mytable 
WHERE complete = 0 
AND DATE(date) = '".$uniqueDate."' 
GROUP BY job 

不過是開始變得有點令人費解,因爲我還需要運行完整= 1

第二個類似的查詢有一定有這樣做的更好的辦法,哈? ..

UPDATE:

的數據看起來有點像這樣:

is job  date     complete 
----------------------------------------------- 
234 324234 2011-06-17 06:59:24  0 
235 324234 2011-06-17 08:09:22  1 
235 544560 2011-06-18 02:51:12  0 
244 677234 2012-07-17 11:12:14  1 

基本上當最初的腳本將運行它會收集數據並將其插入到另一個表的格式如下:

stat_jobID  (job ID from previous table) 
stat_date   (date from previous table) 
stat_complete  (count total) 
stat_incomplete (count total) 
+0

能否請您用一組樣本輸入記錄澄清並伴隨輸出你期望生產哪些行?下面對您的要求有兩種不同的解釋。 –

+0

已更新,並附有說明。謝謝。 – santa

+0

所以結果應該是這3個工作號碼中的每一個都應該是1行,而'324234'應該有'stat_complete,stat_incomplete'的1,1而另外兩個應該有'1,0'和'0,1' ? –

回答

2

正如completeGROUP BY標準,這樣就可以獲得每個計數。

SELECT job, 
     complete, 
     DATE(date) AS report_date, 
     COUNT(*) 
FROM mytable 
GROUP BY job, complete, report_date 

你也可以轉動它,所以你得到完全和不完全在同一行:

SELECT job, 
     SUM(complete >= 1) AS completed, 
     SUM(complete = 0) AS not_completed, 
     DATE(date) AS report_date 
FROM mytable 
GROUP BY job, report_date 

SQLFIDDLE

+0

我們正在閱讀的要求有所不同,但我認爲您可能是正確的 - 每天每個工作的每個0/1的計數,而不是每個工作的行數,每個工作日的0/1都按照我的解釋計數。 –

+0

是的,我注意到了。 _和_使用方式有些模棱兩可。 – Barmar

+0

我嘗試了第二種選擇,因爲它提供了兩次統計,但我認爲我沒有得到預期的結果。下面是我得到的輸出的快照:http://imgur.com/JSr13Sm第三列是「作業ID」,比兩列有總和。我希望所有那些工作= 338的人被合併成兩行來完成,而不是在那個特定的日期。我錯過了什麼?..謝謝。 – santa