2010-04-16 172 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