mysql - 将忽略 NULL 值的 MySQL 中的行聚合为一行
问题描述
给定一张桌子
id date job color qty
1 2018-12-10 12345 green 1
2 2018-12-11 12345
3 2018-12-15 12345
4 2018-12-21 12345 red
5 2018-12-21 12345 4
6 2018-12-22 12345
该id
列是自动递增的,并且是表的主键。
一个简单的查询
SELECT * FROM `table` WHERE `job` = '12345' ORDER BY `id` ASC;
12345
将按照插入的顺序返回作业的所有记录。
问题:如何查询表以仅返回包含每列最新值的单行?
所需的行看起来像这样
6 2018-12-22 12345 red 4
解决方案
一种方法是使用Group_Concat()
withSubstring_Index()
来提取最新的非空值。GROUP_CONCAT()
会忽略这些null
值。
SELECT
MAX(id) AS id,
MAX(date) AS date,
MAX(job) AS job,
SUBSTRING_INDEX(GROUP_CONCAT(color ORDER BY id DESC), ',', 1) AS color,
SUBSTRING_INDEX(GROUP_CONCAT(qty ORDER BY id DESC), ',', 1) AS qty
FROM `table`
WHERE `job` = '12345';
上述查询中的一个假设是 的最大值date
对应于最大值id
。
此外,由于我们只关心“最新”值(只获取一个值);我们将不受group_concat_max_len
变量的限制。
推荐阅读
- ios - IOS项目目标中的多个Objective C桥接头
- javascript - 如何获得第一个解决的递归承诺
- c# - Is there a memory efficient way to use 'using' within a recursive function when e.g. writing lines to a file?
- python - Adding a key on a density graph with Pandas
- reactjs - React/NPM dependecy error on create-react-app project
- flutter - @protected 在飞镖中是什么意思
- python - 线程错误:NameError:未定义名称“datelabelstringvar”
- javascript - 使用搜索词过滤对象数组会得到“TypeError:includes is not a function”
- javascript - 如何获取此 JSON 对象的长度?
- node.js - TSC 2307 - Typescript - 在 Heroku 上部署时找不到模块