这是我的应用程序的当前状态,我有3个表,第一个是处理我有的Procceses的表,(P1,P2),第二个是Orders,这个有信息输出应该有多少行。最后一个活动让我获得每个过程所用时间的实际信息。
进程表有一个标准时间procces应该完成,所以在我的输出中我想添加一个列来估计所有procceses的结束时间,这个逻辑就是{{1}并且结果将与P2的逻辑相同,最终得到估计的时间。
进程表:
(P1 from the order) > (than standard time of P1) true: add (P1 from the order) to FechaRegistro else:add (P1 std time) to FechaRegistro
Ordenes:
| Id | TiempoStd |
|----|-----------|
| 1 | 00:02:00 |
| 2 | 00:24:00 |
ACTIVIDAD:
| Id | Numero | FechaRegistro |
|----|--------|-----------------------------|
| 1 | 111 | September, 29 2015 13:25:00 |
| 2 | 222 | September, 29 2015 13:25:00 |
当前SQL:
| Id | TiempoInicio | Proceso_Id | Orden_Id |
|----|-----------------------------|------------|----------|
| 1 | September, 29 2015 13:25:00 | 0 | 1 |
| 2 | September, 29 2015 13:25:00 | 0 | 2 |
| 3 | September, 29 2015 13:30:00 | 1 | 1 |
当前输出(其中xx:xx:xx是输出,具体取决于现在的时间()):
SELECT
Ordenes.Id, Numero, FechaRegistro, m.P1, a.P2
FROM
Ordenes
LEFT JOIN
(SELECT
Orden_Id,
IF(MIN(TiempoInicio)=MAX(TiempoInicio),SEC_TO_TIME(TIMESTAMPDIFF(SECOND, MIN(TiempoInicio), now())),SEC_TO_TIME(TIMESTAMPDIFF(SECOND, MIN(TiempoInicio), MAX(TiempoInicio)))) as P1
FROM
Actividad
WHERE
Proceso_Id IN ('0' , '1')
GROUP BY Orden_id) AS m ON Ordenes.id = m.Orden_id
LEFT JOIN
(SELECT
Orden_Id,
IF(MIN(TiempoInicio)=MAX(TiempoInicio),SEC_TO_TIME(TIMESTAMPDIFF(SECOND, MIN(TiempoInicio), now())),SEC_TO_TIME(TIMESTAMPDIFF(SECOND, MIN(TiempoInicio), MAX(TiempoInicio)))) as P2
FROM
Actividad
WHERE
Proceso_Id IN ('1' , '2')
GROUP BY Orden_id) AS a ON Ordenes.id = a.Orden_id
ORDER BY id
基本上我不确定我是否需要在上部选择中进行声明或者进行另一次连接,更好的方式我想不出如何将结果分组到最终选择。我不是那种SQL的经验,还在学习。
这将是我预期的输出,模拟仿佛现在的时间| Id | Numero | FechaRegistro | P1 | P2 |
|----|--------|-----------------------------|----------|----------|
| 1 | 111 | September, 29 2015 13:25:00 | 00:05:00 | xx:xx:xx |
| 2 | 222 | September, 29 2015 13:25:00 | xx:xx:xx | (null) |
错误将标准时间放在参考标题中。
September, 29 2015 13:50:00
我正在添加这个小提琴加载fiddle
的信息