Datetime 我需要计算一个日期时间列之间的日期/时间差

Datetime 我需要计算一个日期时间列之间的日期/时间差,datetime,mysql,Datetime,Mysql,细节。 我的notes表包含以下列 ID - INT(3) Date - DateTime Note - VARCHAR(100) Tile - Varchar(100) UserName - Varchar(100) 现在,此表将包含在指定日期/时间由用户名输入的注释和标题 我需要计算同一列中两行之间的DateTimeDifference 例如,上表在表中包含此信息 64, '2010-03-26 18:16:13', 'Action History',

细节。 我的notes表包含以下列

ID       - INT(3)
Date     - DateTime
Note     - VARCHAR(100)
Tile     - Varchar(100)
UserName -  Varchar(100)
现在,此表将包含在指定日期/时间由用户名输入的注释和标题

我需要计算同一列中两行之间的DateTimeDifference

例如,上表在表中包含此信息

64, '2010-03-26 18:16:13', 'Action History', 'sending to Level 2.', 'Salman Khwaja'
65, '2010-03-26 18:19:48', 'Assigned By', 'This is note one for the assignment of RF.', 'Salman Khwaja'
66, '2010-03-27 19:19:48', 'Assigned By', 'This is note one for the assignment of CRF.', 'Salman Khwaja'
现在我需要在使用MYSQL的查询报告中有以下结果集

TASK                -  TIME Taken
ACTION History      - 2010-03-26 18:16:13
Assigned By         - 00:03:35
Assigned By         - 25:00:00
更聪明的方法是

TASK                -  TIME Taken
ACTION History      - 2010-03-26 18:16:13
Assigned By         - 3 minutes 35 seconds
Assigned By         - 1 day, 1 hour.
如果有人能给我简单的查询和PHP代码来嵌入它,我将不胜感激。


<?php
$start = new DateTime('2009-01-01 00:00:00'); // 31 days
$time_span = $start->diff(new DateTime('2009-02-01 00:00:00'));
var_dump($time_span); // returns '1 month'

$start = new DateTime('2009-02-01 00:00:00'); //28 days
$time_span = $start->diff(new DateTime('2009-03-01 00:00:01'));
var_dump($time_span); // returns '1 month'
?>

您似乎希望按案例编号进行分组

使用您的模式和示例数据,我认为这正是您想要的:

SELECT  t1.ID, t1.title AS task, t1.username,
  IFNULL(CONCAT(TIMESTAMPDIFF(MINUTE, t2.currentDate, t1.currentDate)), t1.currentdate) AS time_taken
FROM tps_trans_support_notes t1
LEFT JOIN tps_trans_support_notes t2
  ON t2.currentdate < t1.currentdate AND
    t2.ID <> t1.ID AND
    t2.casenumber = t1.casenumber
LEFT JOIN tps_trans_support_notes t3
  ON t3.casenumber = t1.casenumber AND
    t3.ID <> t1.ID AND t3.ID <> t2.ID AND
    t3.currentdate > t2.currentdate AND
    t3.currentdate < t1.currentdate
WHERE t3.ID IS NULL AND
  t1.casenumber = '21'
ORDER BY t1.ID
选择t1.ID,t1.title作为任务,t1.username,
IFNULL(CONCAT(TIMESTAMPDIFF(分钟,t2.currentDate,t1.currentDate)),t1.currentDate)作为所用时间
来自tps\u trans\u支持注释t1
左连接tps\u trans\u support\u注释t2
在t2.currentdatet2.currentdate和
t3.currentdate
首先,查询将开始时间和结束时间放在同一行中,不包括两行之间发生时间的行,然后显示差异


查询仅以分钟为单位显示差异,但您可以使用其他DateTime函数进行扩展。

我已经搜索并找到了它,但我无法在查询中实现它。你能帮帮我吗。谢谢。您希望查询返回什么?如何选择这两行来比较日期?只是比较下一行和上一行的日期吗?是的。我需要的是比较第一行和第二行的一列(CurrentDate)中的日期/时间。比较并以人类可读的形式给出差异,即1天2小时23分钟。有关详细信息,请参阅快照。谢谢你,马库斯。这个查询非常有效。但问题是,这个查询通过将第一次与所有其他时间进行比较(根据ON子句中设置的标准进行过滤)来给出结果。时间差来自比较第一条记录(作为基准)其余的与第一条记录进行比较。我想要的是两个任务之间的运行间隔。在我上面的示例中,将ID 64与65进行比较,然后将ID 65与66进行比较。再次感谢您提供的解决方案。如果您也能提供此查询的答案,我将不胜感激。@Stringz,对不起,我以为您希望按用户对它们进行分组,title和note。您只想让结果集按日期列排序吗?您不在乎前一行是为不同的用户、标题还是注释?另外,可以用ID列代替日期列吗?@Marcus。我确实希望它们按用户、标题和注释分组。这很好,但比较部分是需要eac之间的间隔h日期/时间。您提供的查询为我提供了从第一到第二、从第一到第三、从第一到第四的时间间隔。而我需要从第一到第二、从第二到第三、从第三到第四,依此类推。再次感谢。@Stringz,对不起,这是我查询中的一个缺陷。我忘记了排除时间间隔为e开始和结束日期。我已更新查询以排除这些行。@Marcus。谢谢Marcus。我正在与您共享表创建语句以及更改后的查询。请您使用正确的查询更新我。表创建语句最好在此处输入。如果您能更正我的查询,我将获得ri,我将不胜感激结果。