求一SQL语句,一句话写完

chocolateboy 2007-09-29 01:07:43
查询表中不同目录分类(字段假设为cata)的最新8条记录,按降序排列,结果为:

ID CATA ...
=============
9 Toy
8 Toy
7 PC
6 PC
...
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
chocolateboy 2007-09-29
  • 打赏
  • 举报
回复
呵呵,谢谢你详细的讲解,买单了
chocolateboy 2007-09-29
  • 打赏
  • 举报
回复
呵呵,谢谢你详细的讲解,买单了
Limpire 2007-09-29
  • 打赏
  • 举报
回复
对于这种“分组提取TOP(N)条记录”的问题,似乎只有这种解决方案,如果效率低,在索引方面想象办法了。

如可以对CATA和ID做一个复合聚集索引,CATA正序,ID逆序,查找的时候就可以省略排序:
select * from 表 a where id in (select top 8 ID from 表 where CATA= a.CATA) and CATA IN (1,2,3,4)

但插入或更新数据会慢一些,关键你怎么取这个平衡点了。

另:或许有效率更高的方法我不知道,以我的能力,就这样了:)
chocolateboy 2007-09-29
  • 打赏
  • 举报
回复
Limpire

你的不错!用IN会不会影效率?而且如果指定分类的话就会用到两个IN

select * from 表 a where id in (select top 8 ID from 表 where CATA=a.CATA order by ID desc) and CATA IN (1,2,3,4) order by CATA,ID desc
Limpire 2007-09-29
  • 打赏
  • 举报
回复
select * from 表 a where id in (select top 8 ID from 表 where CATA=a.CATA order by ID desc) order by CATA,ID desc
kk19840210 2007-09-29
  • 打赏
  • 举报
回复
select * from tab where (select count(1) from tab where id=tab.id and cata=tab.cata)<8
  • 打赏
  • 举报
回复
select top 8 from tab order by ID desc

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧