2011-09-23 55 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

相关问题