私は、データが連結された形式で送られてくることを想定しています - あなたがそれを作成したわけではありません。substring_index()
およびを使用してreverse()
、数値を生成するテーブルと一緒に連結を解除できます。
次のクエリは、連結を元に戻し、結果をグループ化します。
select t.*,
sum(HOUR(TIMEDIFF(STR_TO_DATE(Arbeitsbeginn, '%d.%m.%Y %H:%i:%s'), STR_TO_DATE(Arbeitsende, '%d.%m.%Y %H:%i:%s')))) AS ARBEITSZEIT,
sum(HOUR(TIMEDIFF(STR_TO_DATE(Projektbeginn, '%d.%m.%Y %H:%i:%s'), STR_TO_DATE(Projektbeginn, '%d.%m.%Y %H:%i:%s')))) AS Projektzeit
FROM (select DriverName,
(case when n.n = 1 then substring_index(arbeitsbeginn, ',', 1)
else reverse(substring_index(REVERSE(substring_index(arbeitsbeginn, ',', 2)), ',', 1))
end) as arbeitsbeginn,
(case when n.n = 1 then substring_index(arbeitsende, ',', 1)
else reverse(substring_index(REVERSE(substring_index(arbeitsende, ',', 2)), ',', 1))
end) as arbeitsende,
(case when n.n = 1 then substring_index(Projektbeginn, ',', 1)
else reverse(substring_index(REVERSE(substring_index(Projektbeginn, ',', 2)), ',', 1))
end) as Projektbeginn,
(case when n.n = 1 then substring_index(Projektbeginn, ',', 1)
else reverse(substring_index(REVERSE(substring_index(ProjektEnde, ',', 2)), ',', 1))
end) as ProjektEnde
from (SELECT DRIVERNAME,
GROUP_CONCAT(IF(ACTIONTEXT = 'Arbeitsbeginn', DATETIME, NULL)) AS 'Arbeitsbeginn',
GROUP_CONCAT(IF(ACTIONTEXT = 'Arbeitsende', DATETIME, NULL)) AS 'Arbeitsende',
GROUP_CONCAT(IF(ACTIONTEXT = 'PB', DATETIME, NULL)) AS 'Projektbeginn',
GROUP_CONCAT(IF(ACTIONTEXT = 'PE', DATETIME, NULL)) AS 'Projektende'
FROM geoImportRoot
GROUP BY DRIVERNAME
) A cross join
(select 1 as n union all select 2) n
) t
group by DriverName