2011-02-04 23 views
0

表索引的字段名可以在一个SQL查询中完成吗?

为名称的给定值“NAME1”给我,行以及N行前N行之后(按字母顺序)

+0

你能解释一下你想要的更多吗? – kacalapy 2011-02-04 21:14:29

+0

我有办法在两个选择语句和一个变量做它,它绝对必须在1选择语句? – gh9 2011-02-04 21:39:21

+0

在那里,我的大数据集非常慢,但它在1个查询中完成。 – gh9 2011-02-04 21:54:13

回答

0

以下让你与名称的行= 'name4',之前的两行以及之后的两行。

drop table t; 

create table t(
    name varchar(20) 
    ,primary key(name) 
); 

insert into t(name) values('name1'); 
insert into t(name) values('name2'); 
insert into t(name) values('name3'); 
insert into t(name) values('name4'); 
insert into t(name) values('name5'); 
insert into t(name) values('name6'); 
insert into t(name) values('name7'); 

commit; 

(select name from t where name = 'name4') 
    union all 
(select name from t where name > 'name4' order by name asc limit 2) 
    union all 
(select name from t where name < 'name4' order by name desc limit 2); 


+-------+ 
| name | 
+-------+ 
| name1 | 
| name2 | 
| name4 | 
| name5 | 
| name6 | 
+-------+ 

编辑:由cyberkiwi如指出的(否则我会得到在错误的结束“第一次” 2项) 新增降序排列。

1

在两个select语句中是否用你想要的N替换了第5个数字,并更改表名,这将做到这一点。用正确的列名称替换星号。让我知道你是否有任何问题。

select * from 
    (
     Select * 
     ,row_number() over (order by firstname desc) as 'rowNumber' 
     from attendees 
    ) as temp 
where rowNumber between 
(
    select rownumber-1 
    from 
     (
      Select *, row_number() over (order by firstname desc) as 'rowNumber' 
      from attendees 
     ) as temp 
    where firstname = 'name1') AND (
    select rownumber+1 
    from 
     (
      Select *, row_number() over (order by firstname desc) as 'rowNumber' 
      from attendees 
     ) as temp 
    where firstname = 'name1') 
相关问题