前言 公司某个数据的操作记录,如编辑了两次以上的数据要找出来,如何实现呢
首先要分组,分组之后要查那条数据的编辑记录大于两次的数据,如果直接使用count字段,则是统计的字段出现次数,如何统计那个字段出现的值呢?
答案是使用 case when then 和 null结合使用
case when then的使用方法
count()、count(普通字段)区别是 count() 会把null的数据统计进去、count(普通字段)和count(1)则不会
因此只要我们having后这样写
case when b.content like '%u8054%' then 1 else null end
把其它字段置为null然后再使用聚合函数count
就能筛选出相应的值了
count(case when b.content like '%u8054%' then 1 else null end)>1
- 记录一下实际使用的SQL
SELECT d.number AS "联单号",d.start_name as "起点实例",c.`name`as "处理人名称",FROM_UNIXTIME(b.created_at,"%Y-%m-%d %H:%i:%s") AS "处理时间",b.content AS "处理内容" FROM op_log a
LEFT JOIN op_log_item b ON b.op_log_id=a.id
LEFT JOIN `user` c on c.id=b.created_by
LEFT JOIN ss_electric_ticket d ON d.id=a.main_id
WHERE
d.start_time BETWEEN "2022-04-13" AND "2022-06-30 23:59:59" AND (d.start_area_id=21 or d.end_area_id=21) AND d.deleted=0 AND d.balance_accounts=2
AND a.type="ticket"
GROUP BY a.main_id HAVING COUNT(case when b.content like '%u8054%' then 1 else null end) >1
ORDER BY a.main_id;