2011-09-23 36 views
0

我有三個表,其中一個是工作人員通過批處理完成的任務,這是另一個表,每個任務都有一個batch_id,多個任務可以具有相同的batch_id。第三個表是batch_log,其中有人在批次上工作的所有時間都以唯一ID,批次ID,人員用戶ID,start_time和end_time的形式記錄。如果where條件在連接表上,我會得到重複的結果嗎?

每個任務都有一個估計的以秒爲單位的再生時間和以秒爲單位的估計不再生成時間。我期待得到由任務表中的字段operation_id分組的這兩個字段的總和,以表示它是否是激光切割,去毛刺,繪畫等任務。

問題是我只想要在time_period期間有批處理的批處理任務。批次在batch_log表中有多個條目。

這裏是我嘗試:

SELECT 
    operation_id, SUM(t.estimated_nonrecurring + t.estimated_recurring)/3600 as work_completed 
FROM tasks t 
INNER JOIN batch_log l on t.batch_id = l.batch_id 
WHERE 
    l.start_time BETWEEN DATE("10:00:00") AND DATE(NOW()) 
AND 
    l.time_elapsed < "10:00:00" 
GROUP BY t.operation_id 

我擔心我會得到更高的估值比是真實的,因爲任務表的多個條目可以有相同的批次。

+1

更需要信息,什麼是多任務,給我們一些樣本數據。今天的問題是什麼? TGIF – JonH

+0

感謝Jon,爲了迴應,我已經更新了描述,應該發佈什麼樣的數據? – davidahines

+1

您的解決方案直接進入任務表而不考慮批次表中的批次。您需要加入任務 - >批次 - >批處理日誌。請參閱下面的解決方案 – JonH

回答

1

因爲您只需要基於批處理日誌文件中的任務的時間,您發佈的任務肯定無法工作。

假設您有3個表格:任務,批次和BatchLog。

你會想這樣的:

SELECT 
     SUM(t.estimated_nonrecurring + t.estimated_recurring)/3600 as work_completed, 
     t.OperationID 
FROM 
     Tasks t 
INNER JOIN 
     Batches b 
ON 
     b.BatchID = t.BatchID 
INNER JOIN 
     BatchLog bl 
ON 
     bl.BatchID = b.BatchID 
WHERE 
    bl.start_time BETWEEN DATE("2011-08-01") AND DATE(NOW()) 
GROUP BY 
     t.OperationID 
+0

這真的很有幫助。如果我在任務表上開始,不應該在t.batch_id = b.id上加入b.id?或者有區別。編輯:顯然沒有,只是檢查。 – davidahines

+0

@dah - 你擁有的桌子不是我:),你擁有的商業邏輯不是我:),我只是基於我對你的結構知之甚少的答案。我將它讀作3個表格:任務,批次和batch_logs。任務可以屬於同一批次。這是任務 - >批次之間的一對多關係。你可以加入,以確保你有適當的任務,至少有一批。但是,接下來你需要進一步對其進行一步操作以獲取僅記錄的批次(內部連接批次 - >批次日誌)。並且您的評論狀態'shoundt我加入b.id上t.batch_id = b.id' ...記得我沒有 – JonH

+0

...繼續:表結構,所以我使用我組成的列。我所做的就是使用鉛筆和紙張,並提供一些樣本數據並創建箭頭以建立關係。如果存在箭頭,則需要某種連接。如果你想要批量處理批處理日誌的任務,你需要某種內部連接(不需要左連接,就像使用左連接一樣,你可以在沒有批處理日誌的情況下獲得任務)。 – JonH

相關問題