我的输入数据如下:
story_id || sched_state || story_being_groomed_ts || story_def_ts || story_in_prgrs_ts || story_cmpl_ts||
=========================================================================================================
1 completed 2023-01-01 2023-01-13 2023-01-20 2023-01-23
2 inprogress 2023-01-01 2023-01-10 2023-01-30
我希望我的输出是这样的:
根据时间戳可用性,共有 4 个阶段(已整理、定义、进行中和已完成),我们需要更新输出中的阶段。
story_id || sched_state || last_up_ts
======================================
1 Groomed 2023-01-01
1 Defined 2023-01-13
1 inprogress 2023-01-20
1 Completed 2023-01-23
2 Groomed 2023-01-01
2 Defined 2023-01-10
2 inprogress 2023-01-30
你能帮我解决这个问题吗?
mysql 中没有直接的 unpivot 方法。可以按如下方式完成:
select story_id, sched_state, last_up_ts
from (
select t.story_id,
c.sched_state,
case c.sched_state
when 'Groomed' then story_being_groomed_ts
when 'defined' then story_def_ts
when 'inprogress' then story_in_prgrs_ts
when 'completed' then story_cmpl_ts
end as last_up_ts
from mytable t
cross join
(
select 'Groomed' as sched_state
union all select 'defined'
union all select 'inprogress'
union all select 'completed'
) c
) sub
where last_up_ts is not null
ORDER BY story_id, sched_state, last_up_ts