当前位置: 首页 > 面试题库 >

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

乐正浩博
2023-03-14
问题内容

我有这张表

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

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

我必须得到一本有关SQL的书,哈哈。

谢谢。


问题答案:

这是我在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;


 类似资料:
  • 问题内容: 我有这个SQL查询: 这将导致类似于以下的输出: 我想每个Foo仅保留第一行,而忽略其余的行。 我怎么做? 问题答案:

  • 问题内容: 我在Oracle数据库中有下表 现在,我想检索每个ID的最新值(及其时间)。输出示例: 我只是不知道如何将其放入查询… 此外,以下选项将是不错的选择: 选项1:查询应仅返回最近XX分钟的值。 选项2:应将id与另一个具有id和idname的表中的文本连接起来。id的输出应类似于:id-idname(例如1-testid1)。 非常感谢您的帮助! 问题答案: 给定此数据… …以下查询给出

  • 问题内容: 我有一个如下查询: 结果如下:中心名称和交换数量 我喜欢从此结果(第二行)中选择最大值,除了排序和选择第一行之外,还有谁能帮助我进行MAX查询。 问题答案: 那应该工作

  • 问题内容: 我发现了具有正确答案的类似问题。但是它们对我来说有点复杂。我只想要一个简单的基本声明。 我有: …和: 如何合并它们? 问题答案: 有关OUTPUT子句的更多信息,请查看此文章。

  • 问题内容: 我有一张表,列出已安装的软件的版本: 我想显示每个记录中所有记录的所有字段,但仅显示最高版本(版本也是)。 问题答案: 您没有指定要如何处理关系,但是如果要显示重复项,将这样做。 要使用进行测试的SQLfiddle。 如果您要消除重复项,并且如果存在重复项,请选择最新的重复项,则必须对查询进行某种程度的扩展; 另一个SQLfiddle。

  • 问题内容: 我有一张桌子,如下所示: 这是样本 的汇总功能仅允许我获得每个方面的最高分。我想查询以获得每个人的最高2分,我该怎么办? 我的预期输出是 问题答案: SQLFiddle演示