如何为每个id列显示每条记录4

时间:2016-11-22 04:57:34

标签: mysql

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。

1 个答案:

答案 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