一、group by语句,巧用Max
实现效果:group by 之后去重,多条条件相同数据变为一条,判断多条数据的某些字段,只要有为1的就为1
SELECT
id,
name,
CASE WHEN MAX(status1) = 1 THEN 1 ELSE 0 END AS status1,
CASE WHEN MAX(status2) = 1 THEN 1 ELSE 0 END AS status2,
CASE WHEN MAX(status3) = 1 THEN 1 ELSE 0 END AS status3
FROM
your_table
GROUP BY
id, name;
二、巧用SUBSTRING_INDEX+GROUP_CONCAT
实现效果:还有某个字段,为字符串格式,取最近一条的那一条。
SELECT
id,
name,
CASE WHEN MAX(status1) = 1 THEN 1 ELSE 0 END AS status1,
CASE WHEN MAX(status2) = 1 THEN 1 ELSE 0 END AS status2,
CASE WHEN MAX(status3) = 1 THEN 1 ELSE 0 END AS status3,
SUBSTRING_INDEX(GROUP_CONCAT(field_str ORDER BY id DESC), ',', 1) AS field_str
FROM
your_table
GROUP BY
id, name;