2016-11-22 45 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 –