2016-03-27 4 views
2

Это моя структура БД. Название таблицы LOPList:Использование группы Concat Repeat region

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_end для каждого соответствующего time_start. В этом случае вам не нужно использовать условную агрегацию, вы можете достичь этого с помощью коррелированного запроса:

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

Это даст тот же ряд - 534 - для смежных «Y». –

+0

потрясающий! благодаря –

Смежные вопросы