MySQL-实现特殊select结果的sql语句

MySQL-实现特殊select结果的sql语句

虐人心 发布于 2017-06-10 字数 331 浏览 1212 回复 6

下面是我一个新闻表的部分结构:

id title subject



1 A A_subjec_1
2 A A_subjec_2
3 A A_subjec_3
4 B B_subjec_1
5 B B_subjec_2
6 C C_subjec_1
7 C C_subjec_2
8 E E_subjec_1

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

夜无邪 2017-08-04 6 楼

我写了一个 sql 貌似这个要快点

SELECT a.* FROM news a LEFT JOIN news b ON (a.title = b.title AND a.id < b.id)  WHERE b.id IS NULL;

下面这样:

SELECT MAX(id) AS id FROM news GROUP BY title

程序在循环通过id获取信息,这种处理时间看不出来

浮生未歇 2017-07-24 5 楼

这个我测试了,总共19996数据
在表中没有加索引

SELECT * FROM news WHERE id IN (SELECT MAX(id) FROM news GROUP BY title)执行的时间是0.047s

select * from (select id,title,subject from news order by id desc) as tmp group by titl执行的时间是 0.110s

泛泛之交 2017-07-20 4 楼

这样也可以吧,不过还是建议用程序来实现

 SELECT * FROM news WHERE id IN (SELECT MAX(id) FROM news GROUP BY title)

归属感 2017-07-15 3 楼

select * from (select * from news order by id desc) as tmp group by title

select * from news WHERE id IN (select MAX(id) from news group by title)

根据你的数据量执行一下看那一句更适合, 实在还慢的话就把语句拆开执行

瑾兮 2017-07-01 2 楼

我也经常遇到这样的问题,一般都是先排序,在临时表分组。 如:

 select * from (select id,title,subject from news order by id desc) as tmp group by title

归属感 2017-06-10 1 楼

 SELECT *
FROM test
WHERE id = (SELECT MAX(id) FROM test AS t WHERE t.title = test.title)

这样,然后对title进行索引。

可以参考一篇文章,如何在分组中找出最大或最小记录。
分组中找出最大记录