一、group by语句,巧用Max
实现效果:group by 之后去重,多条条件相同数据变为一条,判断多条数据的某些字段,只要有为1的就为1
sql
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
实现效果:还有某个字段,为字符串格式,取最近一条的那一条。
sql
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;
- 在 GROUP_CONCAT 函数中,我们改为按 id 字段降序排列;
- 使用 SUBSTRING_INDEX 函数来提取第一个值,也就是 id 最大的那条记录对应的 field_str 值。