首页 > 解决方案 > 如何从 MySQL 列中的 JSON 文档中获取最新值?

问题描述

Mysql 版本是8.0.18-commercial 我编写了以下查询,它显示details列的结果

select details from table t1;

Output:
[
  {
    "Msg": "Job Running",
    "Task": "IN_PROGRESS",
    "Date": "2020-07-20 16:25:15",
  },
  {
    "Msg": "Job failed",
    "Task": "IN_PROGRESS",
    "Date": "2020-07-20 16:35:24",
  }
]

我只想要Msg最新的最后一个元素的值Date

我想要的输出是显示Msg元素latest date

ColumnName      ColumnValue
Msg             Job failed

我写了以下查询,但它给出了null输出

select details->>"$.Msg" from table t1;

标签: mysqlsqlarraysjsonjoin

解决方案


如果您正在运行 MySQ。8.0,您可以使用json_table()将 json 数组取消嵌套到行,然后row_number()保留每个原始行的最新记录。

假设您的表的主键是id,您可以将其表述为:

select msg, activity_date
from (
    select x.*, row_number() over(partition by t.id order by x.activity_date desc) rn
    from mytable t
    cross join json_table(
        t.details,
        '$[*]' columns(
            msg varchar(50) path '$.Msg',
            activity_date datetime path '$.activityDate'
        )
    ) x
) t
where rn = 1

DB Fiddle 上的演示

味精 | 活动日期      
:--------- | :-----------------
作业失败 | 2020-07-20 16:35:24

推荐阅读