2016-11-22 47 views
0
id serviceid name cost date 
201 15   X  50 25.12.2016 
201 15   Y  55 29.11.2016 
201 120   Z  50 27.11.2016 
201 19   w  50 22 .11.2016 
201 158   p  50 23.11.2016 
201 18   q  50 21.11.2016 
201 16   rs  50 24.11.2016 
201 81   rs  50 2.11.2016 
202 18   X  50 25.12.2016 
202 18   Y  55 29.11.2016 
202 15   Z  50 27.11.2016 
202 19   w  50 22 .11.2016 
203 15   p  50 23.11.2016 
203 18   q  50 21.11.2016 
203 16   rs  50 24.11.2016 
0 81   rs  50 2.11.2016 

欲望输出:如何显示的每个记录4每个ID列

id serviceid name cost date 
201 15   X  50 25.12.2016 
201 15   Y  55 29.11.2016 
201 120   Z  50 27.11.2016 
201 16   rs  50 24.11.2016 

202 18   X  50 25.12.2016 
202 18   Y  55 29.11.2016 
202 15   Z  50 27.11.2016 
202 19   w  50 22 .11.2016 

203 15   p  50 23.11.2016 
203 18   q  50 21.11.2016 
203 16   rs  50 24.11.2016 

0 81   rs  50 2.11.2016 

我要显示的每个记录4 - 每个ID我试图用自加入申请4记录服务,但有是问题未来请告诉或建议我如何ac-chive为此。

SELECT a.* 
FROM mytable AS a 
WHERE 
    (SELECT COUNT(*) FROM mytable AS b 
    WHERE b.id = a.id and b.serviceid >= a.serviceid) <= 4 
ORDER BY a.id , a.date 

此查询正在尝试,但我无法获取它为每个ID基于日期应该有4强服务ID。

+0

这将需要模拟MySQL的行号,这是MySQL没有的。但除此之外,你需要给我们保留每组4条记录的逻辑。 –

+0

是的,我必须得到每个ID顶级4 serviceid基于顶级日期喜欢我的愿望输出 –

+0

@TimBiegeleisen它不可能在MySQL?你可以请你建议我 –

回答

0

当您想要的结果,我认为你应该使用MySQL的变量这样的:

select 
    t1.* 
from mytable t1 
join (
    select 
     `id`, 
     `serviceid`, 
     `name`, 
     `cost`, 
     `date`, 
     @rowno := case when @grp = `id` then @rowno + 1 else 1 end as rowno, 
     @grp := `id` 

    from mytable 
    cross join (select @rowno:=0, @grp:=null) v 
    order by `id`, `date` desc) t2 
on t1.id = t2.id 
and t1.`date` = t2.`date` 
and t2.rowno < 5 

,这似乎是在每一组问题的经典顶的X记录,看一看的How to select the first/least/max row per group in SQL

+0

但id 203是来6次,而在视图中只有3次 –

+0

你是否运行这个脚本根据您的示例数据? @SrjoanJee – Blank

+0

当我把<7然后它201来了11次,而它应该7次onlye –