我们处理的mysql表格包含以下格式的数据:
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个状态,每个状态都有一个更新日期时间。每个状态都附加一个活动。 例如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
运算符,但无法将列分开。
此外,尝试使用案例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 ;
有人可以对此有所了解吗?
答案 0 :(得分:1)
条件聚合是返回看起来像这样的结果集的一种方法。
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的重复状态值做什么。
还有其他查询模式会返回类似的结果。
答案 1 :(得分:1)
我在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
输出: