select * from (select b.*,(select count(*)+1 from table where MaterialName=b.MaterialName and signDate> b.signDate) as countId from table b)a where a.countId<=3 order by a.countId desc;
百度查的,没建表,所以没测试。你可以试一下,感觉大致差不多,如果符合请采纳,谢谢~
百度:分组取前几条
有点没明白。最近时间的前三条数据 是指所有数据中 最近时间的前3条 还是根据 MaterialName分组后,每一组信息的最近时间前3条
MaterialName分组后
select MaterialName from (select * from 表名 order by SignDate desc ) a group by MaterialName
按最新时间排序
依照MaterialName 分组
是否符合?
select a.* from table_name a where exists (select count(*) from table_name where table_name.MaterialName= a.MaterialName and table_name.SignDate > a.SignDate having Count(*) < 3) order by a.SignDate desc
你这个最后加上where查询
你这个最后怎么加上Where查询,我一加就报错
也不知你具体要的啥,就按每组信息的 最近时间的前三条弄了,下面是sql和结果,Oracle的