分组后组内再排序
先做数据,打开navicat直接复制下面代码创建表和数据
建个表
DROP TABLE IF EXISTS `user_comment`;
CREATE TABLE `user_comment` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`contents` varchar(200) NOT NULL COMMENT '评论',
`create_time` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
KEY `addtime` (`create_time`),
KEY `uid_addtime` (`user_id`,`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8;
往表里插入几条数据
INSERT INTO `user_comment`
(`user_id`,`contents`,`create_time`)
VALUES
('1', '技改', '2021-09-15 11:26:44'),
('1', '技改', '2021-09-15 11:26:44'),
('2', '努力', '2021-09-02 11:26:21'),
('2', '哈哈', '2021-09-03 00:03:03'),
('3', '真该', '2021-09-04 00:04:04'),
('1', '桥上', '2021-09-01 00:05:05'),
('4', '救济', '2021-09-06 00:06:06'),
('4', '多多', '2021-09-07 00:07:07'),
('4', '向多', '2021-09-08 00:08:08'),
('4', '我不', '2021-09-09 00:09:09'),
('3', '那害', '2021-09-10 00:10:10'),
('1', '好啊', '2021-08-29 11:45:53')
要求:
- 查询每个人的最新评论
分析:
每个人(就是按id分组)
最新评论(数据的id最大,数据的插入时间最大)
2.分析结果:查出时间最大的数据,并且按user_id分组
写sql
//按时间倒序查出来一张表
select * from user_comment
order by create_time desc
接着上边的sql
添加,
按时间倒序排序后,按user_id分组
// 上边的sql 拿过来当做一张新的表 起个名 > t
(select * from user_comment
order by
create_time desc)t
select * from
(select * from
user_comment
order by create_time desc) as t
group by user_id
运行结果:
要求1:查询每个人的最新评论。
再添加一个要求。
要求2:查询每个人的最新评论+并且统计每人的评论数量
还是先分析;
1.多加了一个统计数量
也就是多查一条数据,统计一下user_id的次数
上一个sql做修改,多查一条数据
select * from
(select * from
user_comment
order by create_time desc) as t
group by user_id
select t.*,COUNT(t.user_id)as conment_count
from
(
select * from user_comment
order by create_time desc
) t
group by user_id
结果:
ok!
完工。
等等。。。。。如果要查最新的两条数据呢?两条?
要求:每个人最新评论的两条数据。
分析:还是时间最大的前两条数据
重新思路,先看原表
select * from user_comment
自联查询,统计出时间最大数据,取两条
按照时间倒序显示
select * from user_comment u
WHERE
(select COUNT(*)from user_comment u1 where
u1.user_id = u.user_id AND u1.create_time> u.create_time
)< 2
ORDER BY u.user_id,u.create_time desc
结果:
ok,收工。
继续研究,记录一下,有好思路好方法大家多交流。