如何在查询结果集里取第N到第N+7行的数据
按时间排序后想取第4到第10行的记录,如何取?不通过编号取,oracle里有row_number()函数,不知道MS-SQL Server是否有这样的函数。 问题点数:50、回复次数:15Top
1 楼FBug(花知)回复于 2004-08-03 20:35:29 得分 5
我有一个笨方法。不要笑我(以前我就是这么做的)...但不是用函数的。
SELECT TOP (10 - 4 + 1) *
FROM (SELECT top 10 * FROM ( RES_RECORD )ORDER BY ?? ASC)
ORDER BY ?? DESCTop
2 楼rea1gz(冒牌realgz V0.4)回复于 2004-08-03 20:37:13 得分 5
select ...,IDENTITY(int,1,1) as idnew into #t from ...
select * from #t where idnew between 4 and 10
drop table #t
Top
3 楼FBug(花知)回复于 2004-08-03 20:40:10 得分 0
TO 冒牌realgz (呵呵,)
那个 #t是什么意思 ?
是不是临时的一个表.
最后又丢弃了。..Top
4 楼rouqu(石林#黄果树)回复于 2004-08-03 20:54:56 得分 0
# --局部临时表
to:rea1gz(冒牌realgz V0.1) 人家说了 不想通过编号取哦
Top
5 楼zjmym(缘木)回复于 2004-08-03 20:55:40 得分 5
SELECT TOP (10 - 4 + 1) *
FROM (SELECT top 10 * FROM ( RES_RECORD )ORDER BY ?? ASC)
ORDER BY ?? DESC
就可以Top
6 楼lzymagi(逸)回复于 2004-08-03 21:20:38 得分 5
最笨的方法:
select top (10-4+1) from
(select top 10 from bable) order by datetime desc
desc要与不要就是你由排序定的了Top
7 楼walkonthesky(★★★★★)回复于 2004-08-04 10:10:30 得分 0
利用排序转换,好思路Top
8 楼xikboy(狼面书生)回复于 2004-08-04 12:09:39 得分 5
select top 7 * from #T where rq not in (select top 6 rq from #T ) order by rq ascTop
9 楼walkonthesky(★★★★★)回复于 2004-08-04 13:42:49 得分 5
楼上的不符合条件
因为没有给出数据库的字段
Top
10 楼FLandY1982(匡浩)回复于 2004-08-04 14:33:46 得分 5
to FBug(花知) :
SELECT TOP (10 - 4 + 1) *
FROM (SELECT top 10 * FROM ( RES_RECORD )ORDER BY ?? ASC)
ORDER BY ?? DESC
--按照 ?? 排序不行啊 例如 ??的TOP10字段内容为 1119395679 不就有问题了吗 只有??字段为IDENTITY才行吧
Top
11 楼hachongzi(虫子)回复于 2004-08-04 15:19:57 得分 0
select topTop
12 楼rouqu(石林#黄果树)回复于 2004-08-04 17:35:22 得分 10
--建立测试表
create table st1(
logdate smalldatetime,
comment varchar(20)
)
--插入测试数据
insert into st1 values('20040804','first')
insert into st1 values('20040804','second')
insert into st1 values('20040804','third')
insert into st1 values('20040804','fourth')
insert into st1 values('20040804','fifth')
insert into st1 values('20040804','sixth')
insert into st1 values('20040804','seven')
insert into st1 values('20040804','eighth')
insert into st1 values('20040804','ninth')
insert into st1 values('20040804','tenth')
insert into st1 values('20040804','eleventh')
--进行运算处理
select top 10 * into #tem1 from st1 order by logdate asc
select top 7 * into #tem2 from #tem1 order by logdate desc
select * from #tem2 order by logdate asc
--结果
20040804 fourth
20040804 fifth
20040804 sixth
20040804 seven
20040804 eighth
20040804 ninth
20040804 tenth
结果是对的
Top
13 楼rouqu(石林#黄果树)回复于 2004-08-04 17:38:41 得分 0
不过做了个测试 有个问题想不通了
select * from st1 order by logdate asc 结果是
logdate comment
-------- --------------------
20040804 first
20040804 second
20040804 third
20040804 fourth
20040804 fifth
20040804 sixth
20040804 seven
20040804 eighth
20040804 ninth
20040804 tenth
20040804 eleventh
(11 row(s) affected)
然而select top 10 * from st1 order by logdate asc 结果却是
logdate comment
-------- --------------------
20040804 eleventh
20040804 tenth
20040804 ninth
20040804 eighth
20040804 seven
20040804 sixth
20040804 fifth
20040804 fourth
20040804 third
20040804 second
(10 row(s) affected)
谁解释一下?Top
14 楼FBug(花知)回复于 2004-08-05 12:01:00 得分 5
Re : FLandY1982(升级基本靠散分!!)
是的。是有条件。
但也不一定要 ideneity
他的条件是必须能明确的选出 这n条记录。
如果一个ORDER不能确定。。那再加。。到能确定是哪n条为止。
没必要钻这种牛角尖。思想正确了就ok了。完全可以通过简单修改来实现。Top
15 楼rouqu(石林#黄果树)回复于 2004-08-05 12:06:53 得分 0
同意楼上Top




