咨询SQL语句,order by,top相关

ahpei 2008-10-09 03:04:39
表T的数据如下:
sName dDate
a 2008-10-07
a 2008-10-06
b 2008-10-06
b 2008-10-06
c 2008-10-07
d 2008-10-06
c 2008-10-01
...
以此类推,假如该表记录为n。

现在,需要取出dDate最近的10个不重复的sName值。
...全文
204 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alex-16888 2008-10-20
  • 打赏
  • 举报
回复
学习中
ljhcy99 2008-10-20
  • 打赏
  • 举报
回复


select top 10 max(dDate),sName
from T
group by sName
order by dDate desc
MarsLand 2008-10-17
  • 打赏
  • 举报
回复
select a.sname from (select distinct sname from T) a,T b where a.sname=b.sname and b.dDate = (select max(dDate) from T where sName = a.sname) order by b.dDate DESC
已测试过,给分吧
zhaofuxiao321 2008-10-17
  • 打赏
  • 举报
回复
取经来了
yf520gn 2008-10-10
  • 打赏
  • 举报
回复
select sName from
(select sName,dDate,ROW_NUMBER() over( order by dDate desc) rn
from (select sName,max(dDate) dDate from T group by sName))
where rn <=10
刚才的有点错
yf520gn 2008-10-10
  • 打赏
  • 举报
回复
什么数据库?ORA还是sql server?
楼上的TOP只能用在SQL SERVER数据库中~~
ORA写法如下:
select distinc sName from
(select sName,dense_rank() over( order by dDate desc) rn
from T)
where rn <=10
DumDum 2008-10-10
  • 打赏
  • 举报
回复
select top 10 sname,max(dDate) from table group by sName order by sName
luckyhh 2008-10-10
  • 打赏
  • 举报
回复
select distinct top 10 sName from T order by dDate desc
DumDum 2008-10-10
  • 打赏
  • 举报
回复
select sname,max(dDate) from table group by sName
xingyongjian 2008-10-10
  • 打赏
  • 举报
回复
问题没有表述清除!
mathsfan 2008-10-10
  • 打赏
  • 举报
回复
11楼的写法还真牛B...
zouyx317 2008-10-10
  • 打赏
  • 举报
回复
在Sql 2000 中调试了一下
Declare @T table(SName varchar(10),dDate datetime)
insert into @t
select 'a','2008-10-07'
union all Select 'a', '2008-10-06'
union all Select 'b', '2008-10-06'
union all Select 'b', '2008-10-09'
union all Select 'c', '2008-10-07'
union all Select 'd', '2008-10-06'
union all Select 'c', '2008-10-01'
union all Select 'r', '2008-10-06'
union all Select 'z', '2008-10-07'
union all Select 'k', '2008-10-06'
union all Select 'j', '2008-10-01'
union all Select 'i', '2008-10-06'
union all Select 'h', '2008-10-07'
union all Select 'h', '2008-10-08'
union all Select 'g', '2008-10-06'
union all Select 'f', '2008-10-01'
union all Select 'g', '2008-10-09'
union all Select 'f', '2008-10-04'
select * from @T

select top 10 Sname,Max(dDate)as dDate from @T group by Sname


SName dDate
---------- ------------------------------------------------------
a 2008-10-07 00:00:00.000
a 2008-10-06 00:00:00.000
b 2008-10-06 00:00:00.000
b 2008-10-09 00:00:00.000
c 2008-10-07 00:00:00.000
d 2008-10-06 00:00:00.000
c 2008-10-01 00:00:00.000
r 2008-10-06 00:00:00.000
z 2008-10-07 00:00:00.000
k 2008-10-06 00:00:00.000
j 2008-10-01 00:00:00.000
i 2008-10-06 00:00:00.000
h 2008-10-07 00:00:00.000
h 2008-10-08 00:00:00.000
g 2008-10-06 00:00:00.000
f 2008-10-01 00:00:00.000
g 2008-10-09 00:00:00.000
f 2008-10-04 00:00:00.000

(所影响的行数为 18 行)

Sname dDate
---------- ------------------------------------------------------
a 2008-10-07 00:00:00.000
b 2008-10-09 00:00:00.000
c 2008-10-07 00:00:00.000
d 2008-10-06 00:00:00.000
f 2008-10-04 00:00:00.000
g 2008-10-09 00:00:00.000
h 2008-10-08 00:00:00.000
i 2008-10-06 00:00:00.000
j 2008-10-01 00:00:00.000
k 2008-10-06 00:00:00.000

(所影响的行数为 10 行)
xiao_jun_0820 2008-10-09
  • 打赏
  • 举报
回复
select top 10 * from (select sName,max(ddate) as tdate from tmptable group by sName) b order by b.tdate desc

测试数据:
a 2008-10-7
a 2008-10-6
b 2008-10-6
b 2008-10-6
c 2008-10-7
d 2008-10-8
d 2008-10-9
e 2008-10-6
f 2008-10-7
g 2008-10-7
g 2008-10-6
i 2008-10-6
h 2008-10-7
h 2008-10-7
k 2008-10-9
k 2008-10-6
y 2008-10-7
o 2008-10-9
n 2008-10-6
fangsp 2008-10-09
  • 打赏
  • 举报
回复
楼上的正解
顶一个
iamduo 2008-10-09
  • 打赏
  • 举报
回复
select top 10 sName,
(select Max(dDate) from tab as tt2 where tt1.sName=tt2.sName)
as dDate from tab as tt1

试试看。
iamduo 2008-10-09
  • 打赏
  • 举报
回复
沙发一下,让我想想。

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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