2016-03-27 80 views
2

これは自分のDB構造です。 テーブル名LOPList:グループコンカットリピート領域の使用

a busy cat http://i65.tinypic.com/2ebtyr9.png

私はこのSQLを持っている:

select LOPID, EmpId, 
     max(case when LOPStatus = 'Y' then TimeUpdated end) as time_start, 
     max(case when LOPStatus = 'N' then TimeUpdated end) as time_end 
from MultipleLOPStatus 
where JobID = 83 
group by LOPID 

これは私が結果になりたい

LOPID | EmpId | time_start    | time_end 
33 | 28  | 2016-03-27T09:33:05-03:00 | 2016-03-27T11:49:17-03:00` 

であることが結果:

LOPID | EmpId | time_start    | time_end 
33  | 28  | 2016-03-27T09:23:17-03:00 | 2016-03-27T09:31:59-03:00 
33  | 28  | 2016-03-27T09:32:30-03:00 | 2016-03-27T11:49:17-03:00 
33  | 30  | 2016-03-27T09:33:05-03:00 | 2016-03-27T11:48:53-03:00 ` 

これはどのように達成するのですか?

+2

なぜこの結果は出力になるのですか? – sagi

+0

複数の列を 'GROUP BY 'することができます。しかし期待どおりの結果から、どの列がGROUP BYリストにあるべきかは不明です。 –

+1

このタイプのマッチングは、MySQLでは非常に苦労します。 –

答えて

3

あなたが正しく理解していれば、対応するtime_startごとにtime_endを取得したかっただけです。この場合、条件付き集計を使用する必要はありません。相関クエリでこれを実現できます。

SELECT s.LOPID, s.EmpId,s.timeUpdated as time_start, 
     (SELECT MIN(timeUpdated) FROM MultipleLOPStatus t 
     WHERE s.LOPID = t.LOPID and t.empid = s.empid and t.LOPStatus = 'N' 
      AND t.timeUpdated > s.TimeUpdated) as time_end 
from MultipleLOPStatus s 
where s.JobID = 83 
AND s.LOPStatus = 'Y' 
+0

これは、隣接する "Y"に対して同じ行を与えます(534)。 –

+0

awesome!ありがとう –

関連する問題