我正在运行一个查询,以了解在工厂车间完成了多少估计工作,以及与工作站可用的小时数相比,实际跟踪了多少时间。
我这样做是为了确定我们需要购买更多的机器。任何我们的使用率超过 100% 的机器都是我们的产能过剩。
问题是我得到的某些操作的数字高得惊人。 5 个人在一台机器上工作不可能跟踪超过 120 小时,但我得到的结果远远超过 1000 小时。
我在查询中所做的是获取所有具有任务的批处理,然后对每个任务的所有估计时间求和。我将 batch_log 中的所有 time_elapsed 求和,然后将 hours_open 乘以该操作的机器数量。
正因如此,deburr 应该最多有 120 小时,因为他们每天 24 小时开放,并且有 5 个去毛刺站。查看此查询时,有什么明显的东西跳出来了吗?
如果您需要更多信息,请告诉我。
SELECT
DATE(bl.start_time) as date_tracked,
o.name as operation,
SUM(TIME_TO_SEC(bl.time_elapsed)/ 3600) as time_elapsed,
SUM(t.estimated_nonrecurring + t.estimated_recurring) / 3600 as estimated,
o.hours_open as hours_open,
(count(distinct m.id)) as machine_count,
hours_open * (count(distinct m.id)) as total_hours,
(sum(TIME_TO_SEC(bl.time_elapsed)) / 3600) / (count(distinct m.id)) as time_elapsed_usage
FROM
batches b
INNER JOIN
tasks t on b.id = t.batch_id
INNER JOIN
batch_log bl on b.id = bl.batch_id
INNER JOIN
operations o on b.operation_id = o.id
INNER JOIN
machines m on b.operation_id = m.operation_id
WHERE
bl.time_elapsed < "8:00:00"
GROUP BY
b.operation_id,
DATE(bl.start_time)
ORDER BY date_tracked, o.id
所以我又开始了,一旦我到了这一点,我似乎在耗时里有重复:
select
batches.operation_id,
date(batch_log.start_time) as date,
SEC_TO_TIME(SUM(TIME_TO_SEC(batch_log.time_elapsed))) as elapsed,
sum(tasks.estimated_nonrecurring + tasks.estimated_recurring) as estimated_time
from
batches
INNER JOIN batch_log on batches.id = batch_log.batch_id
INNER JOIN tasks on batches.id = tasks.batch_id
WHERE batches.id not in (
-1,
-2,
-3,
-4,
-5,
-6,
-7,
-8,
-9,
-10,
-11,
-12,
-13,
-14
)
group by Date(batch_log.start_time), operation_id
order by batch_log.start_time, batches.operation_id
编辑:我在上面做错了什么?如果我知道这一点,我可以小心地更好地构建查询。老实说,我一直找不到任何东西,而且我一直在翻阅 SQL 书籍。即使我能在较小的陈述上得到答案,我也能取得一些进展。目前正在处理其他事情。
最佳答案
通常当我想做像这样复杂的事情时,我一次开始一个 block 并检查数据,这样我就知道我应该期待什么。
因此,为了进行开发,我首先使用 SELECT * 并计算出我的联接。如果它是一个大型数据集,我可能会通过 where 子句进行过滤以仅选择一组记录,在您的情况下是一个批处理。然后我可以一次返回一个表的原始数据并检查我的结果。
一旦我知道我没有不小心使记录的数量太大,然后我开始添加我想要的真实列。我选择的不是公式,而是将出现在公式中的实际列。这有助于我准确地开发公式。然后我添加公式和任何必要的分组。
附言。我怀疑机器是造成问题的说法是正确的,但我想为您提供一套工具来解决 future 的问题。
关于mysql - 我如何确定我是否在 MYSQL 中得到记录重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931330/