日期:2014-05-17  浏览次数:20428 次

group by语句怎么不出现select语句中的字段?
举例如下
设备表:
检修记录id,设备id,检修时间,检修员(检修人不固定)
select 设备id,max(检修时间)最后检修时间 from 设备表 group by 设备id。
得出这样的结果
设备1,最后检修时间
设备2,最后检修时间
设备3,最后检修时间

我想要的是结果是(带最后一次检修的检修员):
设备1,最后检修时间,张三
设备2,最后检修时间,李四
设备3,最后检修时间,王五

如果这样写语句:select 设备id,max(检修时间)检修时间,检修员 from 设备表 group by 设备id,检修员。结果是:如果李四也检修过设备1,就会把李四的最后一次检修的设备1也列出来。设备1就出现两个最后检修时间,显然不是我想要的。怎样写SQL语句?

------解决方案--------------------
select a.* from 设备表 a join
(
select 设备id,max(检修时间)最后检修时间 from 设备表 group by 设备id
) b
on a.设备id= b.设备id and a.检修时间 = b.最后检修时间

楼主,预计这个语句的结果就是你要的,请查收
------解决方案--------------------

select 设备id,检修时间 最后检修时间,检修员 
 from 设备表  as a
where 检修时间=(select max(检修时间) from 设备表 as b where b.设备id=a.设备id  )



------解决方案--------------------
select a.设备id,a.检修时间,a.检修员 from 设备表 a ,( select 设备id,max(检修时间) as 最后检修时间 from 设备表 group by 设备id) b
where  a.设备id= b.设备id and a.检修时间 = b.最后检修时间

------解决方案--------------------

Select * From 设备表 As a
Where Not Exists(Select 1 from 设备表 As x
Where x.设备id=a.设备id
And x.检修时间>a.检修时间
)