高分求一条SQL语句

伊凡yifan 2012-02-15 10:56:01
SELECT *
FROM (SELECT TOP 1500 *
FROM InfoData
WHERE ((FAV_TYPE = 0) OR
(FAV_TYPE = 9))
ORDER BY CREATE_TIME DESC) DERIVEDTBL
ORDER BY USERLEVEL DESC

会返回

col1 col2 col3
a 12 2010-12...
a 11 2011-11...
b 2 ...
c 1 ...
b 1 ...

如何只列出 col2相同的,即同一个col1下 col2值最大的记录。col2值小的不列出

如下:

col1 col2 col3
a 12 2010-12...
b 2 ...
c 1 ...

...全文
100 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
伊凡yifan 2012-02-15
  • 打赏
  • 举报
回复
我刚刚把你的sql改了改,没用临时表用一行搞定了。select嵌套一下就OK了。非常感谢!100分献上!
-晴天 2012-02-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yifan 的回复:]

第一次执行了二条语句
into #

之后再执行这二条语句,SERVER提示已经有 #这个对像了
[/Quote]
这不要紧的,连接断开后,系统会自动删除这个临时表,你之所以出现临时表已经存在,是因为你在查询分析器的同一个连接中执行了多次.
create table InfoData(col1 varchar(10),col2 int,fav_type int,create_time datetime,USERLEVEL int)
insert into InfoData select 'a',12,0,'2010-12-11',1
insert into InfoData select 'a',11,0,'2011-11-01',1
go
SELECT TOP 1500 * into #
FROM InfoData
WHERE ((FAV_TYPE = 0) OR
(FAV_TYPE = 9))
ORDER BY CREATE_TIME DESC

select * from # a
where not exists(select 1 from # where col1=a.col1 and col2>a.col2)
ORDER BY USERLEVEL DESC
/*
col1 col2 fav_type create_time USERLEVEL
---------- ----------- ----------- ----------------------- -----------
a 12 0 2010-12-11 00:00:00.000 1

(1 行受影响)

*/
go
drop table infodata,#
伊凡yifan 2012-02-15
  • 打赏
  • 举报
回复
第一次执行了二条语句
into #

之后再执行这二条语句,SERVER提示已经有 #这个对像了
伊凡yifan 2012-02-15
  • 打赏
  • 举报
回复
我执行了,仍旧有重复

a 12
a 11

返回的记录中仍旧 不是

a 12
a 12

-晴天 2012-02-15
  • 打赏
  • 举报
回复
你把这两条语句写在一个命令行中执行,中间加个空格或分号,作为在一次连接中执行,不会出问题的.
一次连接中产生的临时表,与其他连接中的临时表不会起冲突.
伊凡yifan 2012-02-15
  • 打赏
  • 举报
回复
不能用临时表的
-晴天 2012-02-15
  • 打赏
  • 举报
回复
2000?
那要用临时表:
SELECT TOP 1500 * into #
FROM InfoData
WHERE ((FAV_TYPE = 0) OR
(FAV_TYPE = 9))
ORDER BY CREATE_TIME DESC

select * from # a
where not exists(select 1 from # where col1=a.col1 and col2>a.col2)
ORDER BY USERLEVEL DESC
伊凡yifan 2012-02-15
  • 打赏
  • 举报
回复
我是sql server 2000
伊凡yifan 2012-02-15
  • 打赏
  • 举报
回复
WITH cte AS 这一行 sql server不认啊
-晴天 2012-02-15
  • 打赏
  • 举报
回复
;with cte as(
SELECT TOP 1500 *
FROM InfoData
WHERE ((FAV_TYPE = 0) OR
(FAV_TYPE = 9))
ORDER BY CREATE_TIME DESC
)select * from cte a
where not exists(select 1 from cte where col1=a.col1 and col2>a.col2)
ORDER BY USERLEVEL DESC
伊凡yifan 2012-02-15
  • 打赏
  • 举报
回复
很急,非常急!THANKS!!
伊凡yifan 2012-02-15
  • 打赏
  • 举报
回复
再顶一下!100%实时结帖!!

34,587

社区成员

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

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