沉淀我所有
阅读时间:2分钟
总结:该方法适用于MySQL分组并求组内数据按照某种字段排序的场景
场景1:取得组内时间最新的数据集合
场景2:根据名称对数据进行去重,优先获取标识"01"激活的id
SQL模板
FROM
t_company_base cb
join
(select
REPLACE(
GROUP_CONCAT(t.id ORDER BY t.active DESC)
,SUBSTR(GROUP_CONCAT(t.id ORDER BY t.active DESC),LOCATE( ',', GROUP_CONCAT(t.id ORDER BY t.active DESC)))
,'') as id
from t_company_base t
where
各种条件
GROUP BY
t.`name`
) tt ON tt.id = cb.id
GROUP BY cb.name
ORDER BY cb.created_time DESC
关键语法
GROUP_CONCAT:分组时将组内的指定字段按照指定规则进行拼接。默认采用逗号拼接。本文指定按照激活状态进行排序。
LOCATE:获取指定字符在整个字符串中第一次出现的位置。本文指定了逗号。
SUBSTR(整个字符串,从第几个字开始往后切割而出)
REPLACE(整个字符串,需要被替换掉的字符串,替换对象)