MySQL在SELECT - WHERE IN语句中获取每个id的最后5个条目

时间:2014-12-16 08:09:59

标签: php mysql select where-in sql-limit

我想为SELECT - WHERE IN语句中的每个id选择最后5个条目。

//How to get last 5 entries for each id
SELECT * FROM table1
WHERE id IN (111,222,333,.....)
ORDER BY date DESC
LIMIT 5

编辑:数据结构的示例

id  date    name
111 7-Nov   Anna
111 8-Nov   Belle
111 9-Nov   Mary
111 10-Nov  John
111 11-Nov  Robert
111 12-Nov  Gary
111 13-Nov  Rick
222 8-Apr   Sarah
222 9-Apr   Lee
222 10-Apr  Margaret
222 11-Apr  Lisa
222 12-Apr  Will
222 13-Apr  Alex
222 14-Apr  Kelly
222 15-Apr  Lucas

期望的结果

id  date    name
111 13-Nov  Rick
111 12-Nov  Gary
111 11-Nov  Robert
111 10-Nov  John
111 9-Nov   Mary
222 15-Apr  Lucas
222 14-Apr  Kelly
222 13-Apr  Alex
222 12-Apr  Will
222 11-Apr  Lisa

我不确定这可以在mysql中完成。我试着看一些贴出来的答案,但我找不到答案。

2 个答案:

答案 0 :(得分:0)

它只是伪代码,但我认为它有效。试试这个

  

选择

     

id,

     

SUBSTRING_INDEX(GROUP_CONCAT(some_column_1 ORDER BY date DESC),',',5)

     

SUBSTRING_INDEX(GROUP_CONCAT(some_column_2 ORDER BY date DESC),',',5)

     

...

     

FROM表WHERE id IN(111,222,333,.....)GROUP BY id;

它看起来不像你想要的。我只是展示如何使用GROUP_CONCAT和SUBSTRING_INDEX函数,你应用这个,你可以找到答案。

答案 1 :(得分:0)

这没有多大意义,但是如果你的mysql版本支持它,你可以使用子查询来做到这一点:

SELECT * FROM `table1`
WHERE `id` IN (SELECT `id` FROM `table1` ORDER BY `date` DESC LIMIT 5)