mysql - 我如何确定我是否在 MYSQL 中得到记录重复?

标签 mysql sql group-by sum

我正在运行一个查询,以了解在工厂车间完成了多少估计工作,以及与工作站可用的小时数相比,实际跟踪了多少时间。

我这样做是为了确定我们需要购买更多的机器。任何我们的使用率超过 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/

相关文章:

mysql - Cassandra(NoSQL) 和 mysql(RDBMS) 是否可以有共同的实体

mysql - 为一对多表关系创建连接查询

SQL选择连接: is it possible to prefix all columns as 'prefix.*' ?

mysql - 在临时表中插入数据时出错(sql)

sql - 按多列分组的聚合函数

php - 将这两个 MySQL 查询合并为一个

php - 如何在 php 中从 MySQL 数据库中选择表?

c# - 为什么 SQLite 插入会非常慢? (使用的交易)

mysql - SQL查询总结问题

mysql - 如何在 rails 中通过查询在组中添加限制?