2016-03-27 14 views
2

Bu, DB yapamdır. Tablo adı LOPList:Grup Concat Tekrarı bölgesinin kullanımı

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 ` 
:

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 

Bu benim sonuçlar olmak istiyorum

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

olduğu ortaya sonuçlanır:

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

Bu SQL var

Bunu nasıl başarıyoruz?

+2

Bu sonuç neden çıktı olmalıdır? – sagi

+0

"GROUP BY" öğesini birden fazla sütun yapabilirsiniz. Ama beklenen sonuçtan, GROUP-BY listesinde hangi kolonların olması gerektiği açık değil. –

+1

Bu tür eşleme MySQL'de yapmak için oldukça acı verici. –

cevap

3

Size doğru bir şekilde anladım, sadece ilgili her bir time_start için time_end değerini almak istediniz. Bu durumda, koşullu toplama kullanmanıza gerek yoktur, bunu ilişkili bir sorguyla başarabilirsiniz:

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

Bu, bitişik "Y" ler için aynı satırı - 534 - verir. –

+0

harika! Teşekkürler –