0

我在 SQL Fiddle 上有一个来自根表的数据透视表,这个链接:数据透视操作

在这里,我尝试计算“Arbeitszeit”、“Arbeitsende”以及“Projektzeit”和“Projektende”之间的差异。

问题是,如果有多个值,则计算不起作用,如下所示:

19.06.2013 07:27:27,19.06.2013 09:08:58

我需要将数据分开或在最好的情况下合并以查看差异的结果。

不可能以任何其他方式获取根数据,因为这是由接口生成的 -

4

1 回答 1

1

我假设数据是以连接形式出现的——而不是你创建它。您可以使用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
于 2013-06-21T13:24:34.650 回答