如何通过选择分组结果中每列的最新非空值来合并/组合行?
| id | 用户 | 水果 | 数字 | 创建时间 |
|---|---|---|---|---|
| 1 | 简 | 苹果 | 空 | 2022-01-01 |
| 2 | 约翰 | 西瓜 | 32 | 2022-01-02 |
| 3 | 约翰 | 空 | 72 | 2022-01-03 |
| 4 | 约翰 | 梨 | 空 | 2022-01-04 |
以下方法不起作用:
SELECT user, COALESCE(fruit) as fruit, COALESCE(number) as number, FROM mytable GROUP BY user ORDER BY created_at DESC
我希望结果是:
Jane Apple Null John Pear 72
问题在于COALESCE()函数不适用于值集,而只适用于列表。
许多主题提到使用MIN()或MAX()而不是COALESCE()作为解决方案。但这不能解决问题,因为我需要新值覆盖旧值,而不是最低或最高值。
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号