加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 06:55:07 所属栏目:MsSql教程 来源:网络整理
导读:我有这张桌子 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_TIME
我有这张桌子
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)记录的列表.我可以在PHP中使用许多不同的SQL查询在循环中执行此操作,但我觉得有一种更简单的方法.

我必须得到一本关于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;

另见“How do I select multiple items from each group in a mysql query?”

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读