我想为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中完成。我试着看一些贴出来的答案,但我找不到答案。
答案 0 :(得分:0)
它只是伪代码,但我认为它有效。试试这个
它看起来不像你想要的。我只是展示如何使用GROUP_CONCAT和SUBSTRING_INDEX函数,你应用这个,你可以找到答案。选择
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;
答案 1 :(得分:0)
这没有多大意义,但是如果你的mysql版本支持它,你可以使用子查询来做到这一点:
SELECT * FROM `table1`
WHERE `id` IN (SELECT `id` FROM `table1` ORDER BY `date` DESC LIMIT 5)