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
欲望输出:
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 - 4记录服务我想尝试使用自我加入的每个id但是有问题来请告诉或建议我如何为此做好准备。
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 :(得分: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