Php 行间时间差
我必须遵循图1下面的查询,这是可行的,但我想做的是得到第4行和第5行之间的时间差,然后得到第5行和第6行之间的差 其目的是在查询中获得类似图2的内容,理想情况下,我希望这样做,而不必在数据库中的每一行循环,然后返回PHP 提前谢谢 图1 图2预期结果Php 行间时间差,php,mysql,sql,datetime,time,Php,Mysql,Sql,Datetime,Time,我必须遵循图1下面的查询,这是可行的,但我想做的是得到第4行和第5行之间的时间差,然后得到第5行和第6行之间的差 其目的是在查询中获得类似图2的内容,理想情况下,我希望这样做,而不必在数据库中的每一行循环,然后返回PHP 提前谢谢 图1 图2预期结果 | ID | Module | MoudleStatus | UpdatedOn | Diff(days) | 4 | LW2205 | Draft exam received | 2017
| 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和ORDERBY子句,您只需再次添加它们。如果有帮助,请告诉我。哦,MySQL DATEDIFF函数默认以天为单位返回值,我认为这正是您想要的。另一种方法是分配行号并加入
SELECT T.*, S.RN1,S.UPDATEDON,
DATEDIFF(t.UPDATEDON,s.UPDATEDON) DIFF
FROM
(
SELECT T.*,
IF(T.MODULE <> @P , @RN:=1,@RN:=@RN+1) RN,
@P:=T.MODULE P
FROM T
CROSS JOIN (SELECT @RN:=0,@P:='') R
where t.Module = 'LW2205'
order by t.module, t.id
)T
LEFT JOIN
(
SELECT T.*,
IF(T.MODULE <> @P1 , @RN1:=1,@RN1:=@RN1+1) RN1,
@P1:=T.MODULE P1
FROM T
CROSS JOIN (SELECT @RN1:=0,@P1:='') R
where t.Module = 'LW2205'
order by t.module, t.id
) S
ON S.RN1 = T.RN - 1 AND S.MODULE = T.MODULE;
注意,结果与您预期的结果不同您使用的是哪个版本的mysql?我使用的是5.1.73DiffDays版本-需要删除括号或用单引号括起来以避免语法错误,谢谢您的提示@p.Salmon。代码更正:DiffDays逃脱了。谢谢各位。。。非常感谢。。。我正在寻找一种方法来做到这一点。。。我会试试,然后再回来。。。。谢谢
| 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
+-----+--------+-------------------------+---------------------+
+------+--------+-------------------------+---------------------+------+--------+------+---------------------+------+
| ID | Module | MoudleStatus | UpdatedOn | RN | P | RN1 | UPDATEDON | DIFF |
+------+--------+-------------------------+---------------------+------+--------+------+---------------------+------+
| 4 | LW2205 | Draft exam received | 2017-10-18 12:41:12 | 1 | LW2205 | NULL | NULL | NULL |
| 5 | LW2205 | Draft exam received | 2017-10-18 12:41:23 | 2 | LW2205 | 1 | 2017-10-18 12:41:12 | 0 |
| 7 | LW2205 | Draft exam received | 2017-10-20 15:06:46 | 3 | LW2205 | 2 | 2017-10-18 12:41:23 | 2 |
| 275 | LW2205 | Exam approved by Dean | 2017-11-14 16:39:28 | 4 | LW2205 | 3 | 2017-10-20 15:06:46 | 25 |
| 288 | LW2205 | Final exam sign off by | 2017-11-21 12:28:59 | 5 | LW2205 | 4 | 2017-11-14 16:39:28 | 7 |
| 295 | LW2205 | Exam sent to SREO (Stud | 2017-11-23 09:53:30 | 6 | LW2205 | 5 | 2017-11-21 12:28:59 | 2 |
+------+--------+-------------------------+---------------------+------+--------+------+---------------------+------+
6 rows in set (0.00 sec)