我正在处理一个订单表,其中包含有关已分配订单的所有详细信息。示例数据库示例为
Order ID Order Status Action Date
23424 ALC 1571467792094280
23424 PIK 1571467792999990
23424 PAK 1571469792999990
23424 SHP 1579967792999990
33755 ALC 1581467792238640
33755 PIK 1581467792238640
33755 PAK 1581467792238640
33755 SHP 1581467792238640
在表中,我有订单ID,状态,action_date(当针对更新时间戳的订单状态有更新时,操作日期将更新,action_date为unix时间)
我正在尝试编写一个查询,该查询可以为我提供订单ID,ALC_AT,PIK_AT,PAK_AT,SHP_AT 基本上所有时间戳都针对一行中的订单ID进行更新,我知道可以通过嵌套查询来完成,但是我无法弄清楚如何做到这一点。
任何帮助将不胜感激。
编辑(根据要求提供示例结果):
Order ID Order Status ALC_AT PIK_AT PAK_AT SHP_AT
23424 SHP 1571467792094280 1571467792999990 1571469792999990 1579967792999990
答案 0 :(得分:1)
我不确定如何在mysql中完成。但是下面介绍了如何在Oracle中完成它。
您可以在mysql中为PIVOT
寻求更多帮助,以帮助您。
select *
from (select order_id,
status,
action_date
from order)
pivot (max(status)
for app_id in ( 'ALC' as 'ALC_AT', 'PIK' as 'PIK_AT', 'PAK' as 'PAK_AT', 'SHP' as 'SHP_AT'))
希望这会对您有所帮助。
编辑mysql:
select *
from (select "order.order_number",
"shipment.status",
from_unixtime("action_date"/1000000) as "action_date"
from order_table
where "order.order_number" = '2019-10-19-N2-6411')
pivot (max("action_date")
for "shipment_status" in ( 'ALC' AS 'ALC_AT', 'PIK' AS 'PIK_AT', 'PAK'
AS 'PAK_AT', 'SHP' AS 'SHP_AT'))