根据要求转换 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
输出:
我们处理的 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
输出: