SQL查询,在每个组中选择最近的5个

Jam*_*s B 7 mysql sql select sql-order-by greatest-n-per-group

我有这张桌子

CREATE TABLE `codes` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `language_id` int(11) unsigned NOT NULL,
 `title` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 `time_posted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud)

language_id指的是记录所使用的语言.我想要做的是检索每个language_id中最近五个(ORDER BY time_posted DESC LIMIT 5)记录的列表.我可以在PHP中使用许多不同的SQL查询在循环中执行此操作,但我觉得有一种更简单的方法.

我必须得到一本关于SQL的书,哈哈.

谢谢.

Bil*_*win 10

以下是我在MySQL中解决这种"每组顶级N"类型查询的方法:

SELECT c1.*
FROM codes c1
LEFT OUTER JOIN codes c2
  ON (c1.language_id = c2.language_id AND c1.time_posted < c2.time_posted)
GROUP BY c1.id
HAVING COUNT(*) < 5;
Run Code Online (Sandbox Code Playgroud)

另请参阅" 如何在mysql查询中从每个组中选择多个项目? "