根据要求转换 MySQL table 的结果

Converting the result of a MySQL table as per requirement

我们处理的 mysql table 具有以下格式的数据:

    entityId    status    updated_date
    -------------------------------
      1          1        29/05/2017 12:00 
      1          2        29/05/2017 03:00
      1          3        29/05/2017 07:00
      1          4        29/05/2017 14:00
      1          5        30/05/2017 02:00
      1          6        30/05/2017 08:00
      2          1        31/05/2017 03:00
      2          2        31/05/2017 05:00
      .
      .   

所以每个实体id都有6个状态,每个状态都有一个更新日期时间。每个状态都有一个 activity 附加到它。 例如 1 - 开始旅程 2 - 到达第一个目的地 3 - 左点 A,向 B 移动。等等

我需要为特定实体 ID(例如 3 和 4)获取以下格式的输出。我需要独立的状态 3 和 4 的时间。

  entity_id   time_started_journey   time_reached_first_destination
           (update time of status 3)   (update time of status 4)
  --------------------------------------------------------------
      1       29/05/2017 7:00         29/05/2017 14:00   
      2       30/05/2017 7:00         30/05/2017 16:00

稍后我需要计算总时间,这将是两者的差值。

如何使用 mysql.

获得预期的结果

我尝试使用 Union 运算符,但无法将其分开。 此外,尝试将 case when operator 与以下查询一起使用但失败了。

 select distinct entityid,
 (case status when 3 then freight_update_time else 0 end) 
 as starttime,
 (case status when 4 then freight_update_time else 0 end) as endtime
 from table ;

有人能解释一下吗?

条件聚合是 return 看起来像那样的结果集的一种方法。

 SELECT t.entityid
      , MAX(IF(t.status=3,t.updated_date,NULL)) AS time_started_journey
      , MAX(IF(t.status-4,t.updated_date,NULL)) AS time_reached_first_destination
   FROM mytable t
  WHERE t.status IN (3,4)
  GROUP BY t.entityid 
  ORDER BY t.entityid

这只是一个建议;规范不清楚查询应该如何处理给定 entityid 的重复状态值。

还有其他查询模式会 return 类似的结果。

我的查询在 MySQL

SELECT
    e3.updated_date AS sta3,
    e4.updated_date AS sta4
FROM
    `prueba` AS e3
LEFT JOIN prueba AS e4
ON
    e3.entityId = e4.entityId AND e4.status = 4
WHERE
    e3.status = 3

输出: