SQL Server 取每个分类中的最新一条
本文发布于 7 年前,部分内容可能已经失去参考价值。
文章表:
文章ID | 分类ID | 标题 | 阅读数 |
1 | 1 | 第一篇文章 | 8 |
2 | 1 | 第二篇文章 | 9 |
3 | 2 | 第三篇文章 | 8 |
分类表:
分类ID | 分类名称 |
1 | 国内新闻 |
2 | 国际新闻 |
问题:怎样获取每个分类中的最新一篇文章?
错误尝试:如果先查分类表,再判断按分类ID去取各自的最新一篇文章,性能是极差的。
思路:查文章表并按分类ID分组,取出该组的最新一篇文章ID,再IN出这些文章。
SQL:
select * from 文章表 where 文章ID in( select max(文章ID) from 文章表 group by 分类ID )
因为文章ID是唯一的,所以以上写法的结果没有问题。
但是如果我们要获取每个分类中阅读量最高的文章,同样有以下 SQL:
select * from 文章表 where 阅读数 in( select max(阅读数) from 文章表 group by 分类ID ) order by 阅读数 desc
这就导致“国内新闻”这个分类的两篇文章都被列出,因为该分类下阅读数居第二的文章的阅读数也是与“国际新闻”阅读数首位的文章相同。
大家有没有更好的思路来完美解决这个问题?注意是 MSSQL 中,MySQL 没有这个烦恼。
可能相关的内容