MySQL中如何将同一UID的多行数据合并为单行显示?
同一UID多行数据合并为单行的实现方法
原始数据(同一UID的多行记录):
UID TIME MIN MON MOUT AIN AINOUT 14406 2022-08-7 ontime - - - 14406 2022-8-7 - ontime - - 14406 2022-08-07 - - ontime - 14406 2022-08-07 - - - ontime
期望合并后的单行结果:
UID TIME MIN MON MOUT AIN AINOUT 14406 2022-08-7 ontime ontime ontime ontime
实现方案
可以利用SQL的GROUP BY分组结合聚合函数MAX()来实现:
SELECT UID, MAX(`TIME MIN`) AS `TIME MIN`, MAX(MON) AS MON, MAX(MOUT) AS MOUT, MAX(AIN) AS AIN, MAX(AINOUT) AS AINOUT FROM your_table_name GROUP BY UID;
说明
同一UID下每个字段只有一个有效取值(ontime),其余均为-,MAX()函数会自动筛选出每个字段的有效值(字符串比较中ontime优先级高于-);通过GROUP BY UID将同一UID的所有行合并为单行。
如果TIME MIN存在格式不一致的情况(如示例中的2022-08-7和2022-08-07),可以先转换为统一日期格式再聚合:
SELECT UID, DATE_FORMAT(STR_TO_DATE(`TIME MIN`, '%Y-%m-%d'), '%Y-%m-%d') AS `TIME MIN`, MAX(MON) AS MON, MAX(MOUT) AS MOUT, MAX(AIN) AS AIN, MAX(AINOUT) AS AINOUT FROM your_table_name GROUP BY UID;
内容的提问来源于stack exchange,提问作者MoJustNow
相关产品推荐
相关产品推荐

