【问题标题】:Get last element from a item in a JSON column in SQL从 SQL 中的 JSON 列中的项目中获取最后一个元素
【发布时间】:2022-01-26 15:04:39
【问题描述】:

如何从 SQL 的 JSON 列中的项目中获取最后一个元素?

我有:

| id | log_json |
| 1        | {'model':'n1n', 'serial':'serial1', 'msg':'last_msg_serial1'}            |
| 2        | {'model':'n1n', 'serial':'serial1', 'msg':'second_msg_serial1'}  |
| 3        | {'model':'n1n', 'serial':'serial1', 'msg':'first_msg_serial1'}  |
| 4        | {'model':'z2z', 'serial':'serial2', 'msg':'last_msg_serial2'}  |
| 5        | {'model':'f3f', 'serial':'serial3', 'msg':'last_msg_serial3'}  |
| 6        | {'model':'f3f', 'serial':'serial3', 'msg':'first_msg_serial3'}  |

我只需要每个“系列”的最后一项。喜欢:

| id_log | model | serial | msg |
| 1        | 'n1n' | 'serial1' | 'last_msg_serial1'      |
| 4        | 'z2z' | 'serial2' | 'last_msg_serial2'     |
| 5        | 'f3f' | 'serial3' | 'last_msg_serial3'     |

我正在尝试:

SELECT
  id as id_log,
  JSON_UNQUOTE(log_json->"$.model") as model,
  JSON_UNQUOTE(log_json->"$.serial") as serial,
  JSON_UNQUOTE(log_json->"$.msg") as msg
FROM table_mysql, (
  SELECT max(id) as last_id
  FROM table_mysql GROUP BY JSON_UNQUOTE(log_json->"$.serial")
  ) t1
WHERE id = t1.last_id
GROUP BY JSON_UNQUOTE(log_json ->"$.serial")

【问题讨论】:

    标签: mysql json


    【解决方案1】:

    您可以使用ROW_NUMBER,但您的查询几乎是好的:

    SELECT
      id as id_log,
      JSON_UNQUOTE(log_json->"$.model") as model,
      JSON_UNQUOTE(log_json->"$.serial") as serial,
      JSON_UNQUOTE(log_json->"$.msg") as msg
     FROM table_mysql
     JOIN (
          SELECT max(id) as last_id
          FROM table_mysql GROUP BY JSON_UNQUOTE(log_json->"$.serial")
          ) as t1
        ON id = t1.last_id
    

    【讨论】:

    猜你喜欢
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-19
    • 2012-06-01
    • 2020-05-01
    • 2017-02-18
    • 1970-01-01
    相关资源
    最近更新 更多