我在 SQL Fiddle 上有一个来自根表的数据透视表,这个链接:数据透视操作
在这里,我尝试计算“Arbeitszeit”、“Arbeitsende”以及“Projektzeit”和“Projektende”之间的差异。
问题是,如果有多个值,则计算不起作用,如下所示:
19.06.2013 07:27:27,19.06.2013 09:08:58
我需要将数据分开或在最好的情况下合并以查看差异的结果。
不可能以任何其他方式获取根数据,因为这是由接口生成的 -
我假设数据是以连接形式出现的——而不是你创建它。您可以使用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