我有一个这样的数据库:
https://i.stack.imgur.com/0bUfl.png主表
"Procedure"在"Procedure_Event"表中可以有多行。每个过程事件行都有一个名为"time"的列。
在这里,我可以计算从记录的第一行到最后一行的总时间。
结果如下:
-在过程表中创建行并添加数据。作品
-过程事件行在"过程事件"表中创建,并且为填满。作品
-使用中的第一行和最后一行计算时间长度那张唱片-不行-将计算的时间长度插入到开始时创建的过程行列中。这一列将被命名为"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:
感谢您的宝贵时间。
您的查询中有一些错误:
SELECT procedure_id, SELECT MIN(TIME) AS START FROM procedure_events GROUP BY procedure_id
这是不好的,你只对每个查询使用一次select,而不是对你想要检索的每个字段或你想要计算的函数,所以上面将是:
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
然后可以将计算值插入到相应的表中。
欢呼。