现在要从维修工单中筛选出每个机台维修次数最多的部件信息,
表名为MT_OVERHAUL_RECORD,要求筛选每台机器的最大维修次数零件
select * from (
select count(*) as num ,machine_id,device_id,device_name from tablename group by machine_id,device_id,device_name) b
where (b.num,machine_id) in(
select max(num),machine_id from (
select count(*) as num ,machine_id,device_id,device_name from tablename group by machine_id,device_id,device_name) a
group by machine_id
)
sqlserver下的写法。不知道对不对,但是思路应该是没错的。因为没装sqlserver,没法验证
select top 1 device_name from (select device_name, count(*) as 维修次数 from 表 where machine_id = xxx group by device_name) order by 维修次数
group by 机器id 确定机器
order by 维修次数 降序排列
select count(*) as num ,machine_id,device_id,device_name from tablename group by machine_id,device_id,device_name
这样得到的表结构就是 num,machine_id,device_id,device_name;因为你的device_name和device_id是对应的,所以不影响group by 主要是为了后面的对照。num就是根据机器和零件聚合出来的数量。表大概是这个样子的
num machine_id device_id device_name
10 1 1 1
1 1 2 2
5 2 1 1
然后就简单了。
你只要从这个表中找到根据machine_id分组后的num最大值就行了。就是你要的结果