我的输入数据如下:

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中没有直接取消透视的方法.可以按如下方式完成:

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

Mysql相关问答推荐

MySQL如何在触发器内部 Select 多行然后插入它们

过滤值为0时如何在MySQL查询中设置条件?

基于多个 where 子句在规范化表中查找公共 ID(值)

SQL: Select TEXT 字段的子字符串比整个值快

MySQL,递归 CTE.它如何以这种句法形式工作?

MySQL Procedure 变量在 count(*) 上接收 null

有人可以帮我优化这个查询吗?

提取 MySQL 5.7 连续值的差异

在一个 SQL 查询中对同一列中相同类型的不同值求和

查询以从约会表中获取可用空档

如何使用 IF() 条件在 MySQL 中显示真假行

在 MySQL 中使用三个表进行计算

试图获取非对象的属性

MySql - 默认情况下主键是唯一的吗?

最好的 MySQL 性能调优工具?

在 WHERE 子句中使用 CASE

在 PHP 中获取 MySQL 列的总和

如何在mysql中连接整数(整数和整数)和varchar(nvarchar和varchar)等数据类型?

MySQL - 如何 Select 值在数组中的行?

Drupal 的默认密码加密方法是什么?