2016-03-27 36 views
2

這是我的數據庫結構。 表名LOPList:Group Concat的使用重複區域

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」多列。但從您的預期結果來看,並不清楚哪些colums應該在GROUP-BY-list中。 –

+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

太棒了!謝謝 –