0

各タスクに日付、開始時刻、終了時刻、および user_id があるタスク用の MYSQL テーブルがあります。特定の日付の総時間数を計算したい。

テーブル構造

CREATE TABLE tasks
    (`id` int,`user_id` int, `title` varchar(30), `task_date` datetime, `start` time, `end` time)
;

INSERT INTO tasks
    (`id`,`user_id`, `title`,`task_date`, `start`, `end`)
VALUES
    (1,10, 'Task one','2013-04-02', '02:00:00', '04:00:00'),
    (2,10, 'Task two','2013-04-02', '03:00:00', '06:00:00'),
    (3,10, 'Task three.','2013-04-02','06:00:00', '07:00:00');

MYSQL クエリ

select  TIME_FORMAT(SEC_TO_TIME(sum(TIME_TO_SEC(TIMEDIFF( end, start)))), "%h:%i") AS diff
FROM tasks
where task_date="2013-04-02"

結果は「06:00」時間です。これは問題ありませんが、重複する時間を除外したいと考えています。私が与えた例では、結果は "05:00" である必要があります。2 番目のレコードの 3 から 4 の間の時間が除外される場合、この時間は 2 から 4 の間の 1 番目のレコードに既に存在するためです。

  • 最初のレコード 2=>4 = 2 時間
  • 2 番目のレコード 3=>6 = 3 時間 3-1 時間 = 2 (1 時間は、1 番目のレコードと 2 番目のレコードの間のオーバーラップ時間です)
  • 3回目 6=>7=1

合計は 5 時間

私の質問が明確になったことを願っています。 http://sqlfiddle.com/#!2/05dd8/2

4

1 に答える 1