ああ、自明ではありません。
select id, time as start_time,
(select t2.time
from t t2
where t2.id = t.id and t2.comment = 'end' and t2.time > t.time
order by t2.time asc
limit 1
) as end_time
from t
where comment = 'start';
これは、開始と終了が完全にインターリーブされていることを前提としてい - 列内の2つの開始が決してないこと:ここで1つの方法です。
EDIT:
データはより複雑である場合は、開始と終了を注文するために変数を使用することができ、そしてそのことによって集計:
select id,
max(case when comment = 'start' then time end) as start_time,
max(case when comment = 'end' then time end) as end_time
from (select t.*,
(@s_rn := if(comment = 'start', @s_rn + 1, @s_rn)) as s_rn,
(@e_rn := if(comment = 'end', @e_rn + 1, @s_rn)) as e_rn
from t cross join
(select @s_rn := 0, @e_rn := 0) params
order by t.time
) t
group by id, (case when comment = 'start' then s_rn else e_rn end);
あなたの「ビッグクエリ」を投稿してください。 –