简述
最近做项目过程中遇到这样一个需求:实现不同分组取不同的值(类似先排序再分组),具体需求如下:
(1)将客户按手机号进行分组;
(2)分组之后数据如果有部门A,则优先取部门A数据;
(3)如果分组数据中没有部门A的数据,则优先取先录入的数据。
先来看表结构:
解决思路
(1)实现分组,并获取分组数据中最先导入的【cphone分组+addtime时间正序】
SELECT
cid,
cphone,
addtime
FROM
(
SELECT
cid,
cphone,
addtime
FROM
crm_test
ORDER BY
addtime
) AS a
GROUP BY
cphone
LIMIT 0,10
(2) 分组如何优先取A部门的数据?这里想到的是:增加一个字段来区分是否是A部门,增加字段is_market(为0表示为A部门)如下图:
这样可以对is_market字段进行排序,就能够优先取A部门的数据,依照上一步来对SQL进行改写。
解决方案
(1)MySQL5.5版本
-- MySQL5.5
SELECT * FROM ( SELECT cid,cphone,