Sql如何提取众多分类的第一条信息

slayerbb 2008-01-22 05:16:36
常用的文章系统,如何用一条sql语句提取出每个分类的第一条并按OrderCol字段排序。分类大概几十个,一共只要取top 10 这样


...全文
954 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
napoleaon 2008-01-24
  • 打赏
  • 举报
回复
天天答。不答了。
alex_xjf 2008-01-23
  • 打赏
  • 举报
回复
选择多了点,,,不过不错的!
slayerbb 2008-01-23
  • 打赏
  • 举报
回复
select top 10 m.id as id, rtrim(left(title,11)) as titles,Clicks,AddTime,Auther,meno,Classes,s.phone as phone,s.name as name from
(select t.* from tb t where refreshtime = (select max(OrderCol) from tb where userid = t.userid) ) m
inner join UserTable on s.userid=m.userid where m.id = (select max(id) from
(select t.* from tb t where OrderCol = (select max(OrderCol) from tb where isshow=0 and userid = t.userid)) n
where m.userid = n.userid)
order by OrderColdesc

现在使用的代码。。。
感觉又臭又长。。。
IT_zen 2008-01-23
  • 打赏
  • 举报
回复
mark
pt1314917 2008-01-23
  • 打赏
  • 举报
回复
天天答。不答了。
wei123456 2008-01-23
  • 打赏
  • 举报
回复
学习
-狙击手- 2008-01-22
  • 打赏
  • 举报
回复
[code=SQL]declare @t table(type varchar(4),detail varchar(10))
insert @t select
'001','a' union select
'001','sss' union select
'001','gssfa' union select
'002','fdsf' union select
'002','fs' union select
'002','gahas' union select
'003','sdga' union select
'003','hahasg' union select
'003','gdsag'



select a.type,a.detail
from @t a
join @t b
on a.type= b.type
group by a.type,a.detail
having count(case when a.detail <= b.detail then 1 else null end) < = 2 --可动态修改
order by a.type asc

/*


type detail
---- ----------
001 gssfa
001 sss
002 fs
002 gahas
003 hahasg
003 sdga

(所影响的行数为 6 行)
*/

select a.* from @t a
where exists (select count(*)
from @t
where type = a.type and detail > a.detail having Count(*) < 2)
order by a.type



/*


type detail
---- ----------
001 gssfa
001 sss
002 fs
002 gahas
003 hahasg
003 sdga

(所影响的行数为 6 行)
*/
select a.* from @t a
where exists (select count(*)
from @t
where type = a.type and detail < a.detail having Count(*) < 2)
order by a.type
/*
type detail
---- ----------
001 a
001 gssfa
002 fdsf
002 fs
003 gdsag
003 hahasg

(所影响的行数为 6 行)
*/

select a.*
from @t a
where detail in (select top 2 detail
from @t where type=a.type
order by detail desc)
order by a.type,a.detail
/*
type detail
---- ----------
001 gssfa
001 sss
002 fs
002 gahas
003 hahasg
003 sdga

(所影响的行数为 6 行)
*/
select a.*
from @t a
where detail in (select top 2 detail
from @t where type=a.type
order by detail asc)
order by a.type,a.detail
/*

type detail
---- ----------
001 a
001 gssfa
002 fdsf
002 fs
003 gdsag
003 hahasg

(所影响的行数为 6 行)
*/
[/code]
dawugui 2008-01-22
  • 打赏
  • 举报
回复
我看得这么麻烦.
slayerbb 2008-01-22
  • 打赏
  • 举报
回复
一定要这么麻烦的么。。。
-狙击手- 2008-01-22
  • 打赏
  • 举报
回复
关注
fcuandy 2008-01-22
  • 打赏
  • 举报
回复
天天都有重复的问题要回答.
dawugui 2008-01-22
  • 打赏
  • 举报
回复
--取小
select top 10 m.* from
(
select t.* from tb t where OrderCol = (select min(OrderCol) from tb where 分类 = t.分类)
) m where id = (select min(id) from
(
select t.* from tb t where OrderCol = (select min(OrderCol) from tb where 分类 = t.分类)
) n where m.分类 = n.分类
)
--取大
select top 10 m.* from
(
select t.* from tb t where OrderCol = (select max(OrderCol) from tb where 分类 = t.分类)
) m where id = (select max(id) from
(
select t.* from tb t where OrderCol = (select max(OrderCol) from tb where 分类 = t.分类)
) n where m.分类 = n.分类
)

dawugui 2008-01-22
  • 打赏
  • 举报
回复
那就把上面的结果用同样的方法再用ID做一次.
slayerbb 2008-01-22
  • 打赏
  • 举报
回复
有Id字段 identity 类型
slayerbb 2008-01-22
  • 打赏
  • 举报
回复
我现在脑袋有些糨糊,呵呵
slayerbb 2008-01-22
  • 打赏
  • 举报
回复
分类 列 和 排序 列 同时相等的情况 很多
dawugui 2008-01-22
  • 打赏
  • 举报
回复
如果这样,那就判断是否有个字段能区分大小.如果不能,则使用临时表了.

将数据插入TMP

select * , id = identity(int , 1 , 1) into tmp from tb
slayerbb 2008-01-22
  • 打赏
  • 举报
回复
补充一条 ordercol 一样存在 重复现象。
dobear_0922 2008-01-22
  • 打赏
  • 举报
回复
常用的文章系统,如何用一条sql语句提取出每个分类的第一条并按OrderCol字段排序。分类大概几十个,一共只要取top 10 这样

--------
select * from 文章表 a
where not exists(select 1 from 文章表 where 类别=a.类别 and OrderCol>a.OrderCol)
order by OrderCol desc
wzy_love_sly 2008-01-22
  • 打赏
  • 举报
回复
哈转,但不知道谁把你的签名去了...........
加载更多回复(4)
通过慢sql分析的学习,了解什么是慢sql,以及慢SQL会引起那些性能问题。清楚慢sql日志的设置,然后再通过慢sql分析工具的学习,清楚慢sql分析的步骤和流程。慢sql分析工具:mysqldumpslow工具、explain工具、profile工具、Optimizer Trace工具。 提供课程中所使用的sql语句。 课程内容:第一章:课程简介1、课程介绍2、课程大纲 第二章:慢sql简介1、慢sql简介2、慢sql会引起的问题 第三章:慢日志的设置1、慢sql的分析流程2、慢日志参数理解3、慢日志参数设置:第1种方式:my.ini文件设置4、慢日志参数设置:第2种方式:sql脚本设置5、慢日志参数设置-效果验证 第四章:如何发现慢sql1、如何发现慢sql:第1种方式:慢日志文件2、如何发现慢sql:第2种方式:mysql库的slow_log表 第五章:慢sql分析工具1、慢sql提取-mysqldumpslow工具-使用方法2、慢sql提取-mysqldumpslow工具-操作实战3、慢sql的执行计划分析-explain分析-执行计划结果说明4、慢sql的执行计划分析-explain分析-索引介绍+type类型举例5、慢sql的资源开销分析-profile分析-分析步骤6、慢sql的资源开销分析-profile分析-show profile执行阶段说明7、慢sql的资源开销分析-profile分析-完整列表说明+操作实战8、慢sql的跟踪分析-Optimizer Trace分析-分析步骤9、慢sql的跟踪分析-Optimizer Trace表的介绍10、索引失效场景举例 第六章:慢日志清理1、慢日志清理

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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