我必须遵循下面的查询图1,它有效,但我想做的是获取第4行和第5行之间的时间差,然后获取第5行和第6行之间的差异.
目标是得到类似图2的东西。理想情况下,我想在查询中执行此操作,而不必循环遍历数据库中的每一行,然后返回 PHP。
提前致谢。
<小时/>图1
select * from ModuleFlowModuleStatus where ModuleCode = "LW2205" ORDER BY UpdatedOn;
| ID | Module | MoudleStatus | UpdatedOn |
| 4 | LW2205 | Draft exam received | 2017-10-18 12:41:12 |
| 5 | LW2205 | Draft exam received | 2017-10-18 12:41:23 |
| 7 | LW2205 | Draft exam received | 2017-10-20 15:06:46 |
| 275 | LW2205 | Exam approved by Dean | 2017-11-14 16:39:28 |
| 288 | LW2205 | Final exam sign off by | 2017-11-21 12:28:59 |
| 295 | LW2205 | Exam sent to SREO (Stud | 2017-11-23 09:53:30 |
+-----+--------+-------------------------+---------------------+
<小时/>
图 2 预期结果
| ID | Module | MoudleStatus | UpdatedOn | Diff(days)
| 4 | LW2205 | Draft exam received | 2017-10-18 12:41:12 | 0
| 5 | LW2205 | Draft exam received | 2017-10-18 12:41:23 | 0
| 7 | LW2205 | Draft exam received | 2017-10-20 15:06:46 | 2
| 275 | LW2205 | Exam approved by Dean | 2017-11-14 16:39:28 | 24
| 288 | LW2205 | Final exam sign off by | 2017-11-21 12:28:59 | 7
| 295 | LW2205 | Exam sent to SREO (Stud | 2017-11-23 09:53:30 | 3
+-----+--------+-------------------------+---------------------+
最佳答案
此 SQL 代码应该适用于应用于图 1 中的表:
SELECT
t1.ID,
t1.Module,
t1.MoudleStatus,
t1.UpdatedOn,
IFNULL(DATEDIFF(
t1.UpdatedOn,
(SELECT MAX(t2.UpdatedOn) FROM ModuleFlowModuleStatus AS t2 WHERE t2.id < t1.id)
), 0) AS `Diff(Days)`
FROM
ModuleFlowModuleStatus AS t1;
代码可以稍微优化/改进,但它对我有用。我省略了 WHERE 和 ORDER BY 子句以简化我的代码,您只需再次添加它们即可。如果有帮助请告诉我。哦,MySQL DATEDIFF 函数默认返回以天为单位的值,我认为这正是您想要的。
关于php - 行之间的时间差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48211142/