从新创建的记录计算时间长度,然后将该时间插入记录中的列?

时间:2011-07-26 16:54:40

标签: php mysql join

我有一个像这样的数据库:

http://i.imgur.com/0vzoT.png

主表名为

“Procedure”在“Procedure_Event”表中可以有很多行。每个过程事件行都有一个名为“time”的列。

这是在这里,所以我可以计算从该记录的第一行到最后一行的总时间。

这就是:

  

- 创建过程表中的路径并添加数据。 -Works

     

-Procedure事件行在“Procedure Event”表中创建并且是   填充。 -Works

     

- 使用第一行和最后一行计算时间长度   那条记录 - 不行    - 将计算的时间长度插回到在开始时创建的“过程”行列中。该列将被称为“procedure_length”

为什么我这样做? 这将允许用户找到程序

这是我的疑问:

SELECT procedure_id, SUBTIME(events_max.start, events_min.start) AS duration
FROM procedure
JOIN ( SELECT procedure_id, SELECT MAX(time) AS start FROM procedure_events GROUP BY procedure_id ) AS events_max USING ( procedure_id )
JOIN ( SELECT procedure_id, SELECT MIN(time) AS start FROM procedure_events GROUP BY procedure_id ) AS events_min USING ( procedure_id )
GROUP BY procedure_id

我应该把它放在存储过程中吗?

目前我的查询收到错误1064:

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

您的查询中存在一些错误:

SELECT procedure_id, SELECT MIN(TIME) AS START FROM procedure_events GROUP BY procedure_id 

这不好,你使用每个查询选择一次而不是你想要检索的每个字段或你想要计算的功能,所以上面将是:

SELECT procedure_id, MIN(TIME) AS START FROM procedure_events GROUP BY procedure_id 

其次,TIME和START是保留字,不能用作字段名称(除非用反引号括起来`` - 但这不是一个好的推荐)。

始终尽量让您的查询尽可能简单 - 这会给您:

  • 将来易于维护

  • 可读性

  • 绩效优势

如果你只想计算一个程序的持续时间,这可以给你一个起点:

SELECT
  procedure_id,
  TIMEDIFF(MAX(`time`), MIN(`TIME`)) AS duration
FROM procedure_events
GROUP BY procedure_id

然后,您可以将计算值插入适当的表格中。

干杯。