2010-04-16 169 views
2

详细信息。 我有笔记表具有以下列。我需要计算一个日期时间列之间的日期/时间差

ID  - INT(3) 
Date  - DateTime 
Note  - VARCHAR(100) 
Tile  - Varchar(100) 
UserName - Varchar(100) 

现在这张表将会在指定的日期/时间有NOTES以及UserName输入的标题。

我需要计算在同一列

例如上表中具有的表中的信息这peice的两行之间的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. 

我将不胜感激如果可以给我平淡QUERY用PHP代码一起嵌入到这一点。

回答

1
<?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' 
?> 
+0

http://php.net/manual/en/datetime.diff.php – Svisstack 2010-04-16 12:15:02

+0

谢谢,但我会很感激MYSQL查询以及。 – Stringz 2010-04-16 12:39:39

0
+0

我已经搜索并找到它,但我无法在查询中实现它。你能帮我解决吗? 谢谢。 – Stringz 2010-04-16 13:26:37

+0

你想查询返回什么?我如何选择两行来比较日期?它只是比较下一行日期和前一行? – 2010-04-16 15:04:29

+0

是的。 我需要的是比较第一行到第二行的一列(CurrentDate)中的日期/时间。比较它,并给出人类可读形式的差异,这是一天,2小时,23分钟。有关详细信息,请参阅快照。 http://processmaker.wordpress.com/2010/04/20/query-issues/dump1/ http://processmaker.wordpress.com/2010/04/20/query-issues/ – Stringz 2010-04-21 06:38:16

0

它看起来像你想按病例数。

使用您的架构和样本数据,我认为这是你想要什么:

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 

首先,查询获取的开始时间和结束时间到同一行,但不包括其中有次行发生在两者之间,然后显示差异。

该查询只显示以分钟为单位的差异,但您可以使用其他DateTime函数来扩展该差异。

+0

谢谢马库斯。这个查询就像一个魅力。但事情是, 这个查询通过比较第一次和其他所有时间(在ON子句中设置的标准过滤偏离路线给出结果 时间差异来自比较第一次记录(作为基准),其余部分与第一条记录进行比较 我想要的是两个任务之间的运行时间间隔在上面的示例中,将ID 64与65进行比较,然后将其与65进行比较65. 再次,THANKYOU这么多的解决方案。如果您也可以提供此查询的答案,我将不胜感激。 – Stringz 2010-04-19 07:57:58

+0

@Stringz,对不起,我以为你想让他们按用户,标题和音符分组。你只是想按日期列排序的结果集?你不在乎前面的行是用于不同的用户,标题还是注释?另外,ID列可以代替日期列吗? – 2010-04-19 13:33:36

+0

@马库斯。我希望他们按用户,标题和注释分组。这很好,但比较部分是我需要每个日期/时间之间的间隔。 您提供的查询给我的间隔从第一到第二,然后是第一到第三和第一到第四。虽然我需要从一到二,二到三,三到四,等等。 再次感谢。 – Stringz 2010-04-19 13:54:05