Мне нужно рассчитать разницу между датой и временем между одним столбцом даты и времени - PullRequest
2 голосов
/ 16 апреля 2010

подробности. У меня есть таблица заметок со следующими столбцами.

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

Теперь в этой таблице будут НОТЫ вместе с заголовками, введенными UserName на указанную дату / время.

Мне нужно вычислить 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.

Буду признателен, если кто-нибудь даст мне PLAIN QUERY вместе с PHP-кодом для его встраивания.

Ответы [ 3 ]

1 голос
/ 16 апреля 2010
<?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 голосов
/ 16 апреля 2010

Похоже, вы хотите сгруппировать по номеру дела.

Используя вашу схему и пример данных, я думаю, что это именно то, что вы хотели:

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 голосов
/ 16 апреля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...