???菜鸟问一条sql语句。。 ( 积分: 50 )

  • 主题发起人 wanglong0
  • 开始时间
W

wanglong0

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个表叫‘人员’
id 姓名
1 刘
2 张
3 李
4 宋
5 王
6 何

我想找出id<4的后两条记录,所以我这么写:
select top 2 * from 人员 where id<4 order by id desc
显示出来:
id 姓名
3 李
2 张
但我想让他们正序显示
如:
id 姓名
2 张
3 李
高手,怎么办呢??
 
我有一个表叫‘人员’
id 姓名
1 刘
2 张
3 李
4 宋
5 王
6 何

我想找出id<4的后两条记录,所以我这么写:
select top 2 * from 人员 where id<4 order by id desc
显示出来:
id 姓名
3 李
2 张
但我想让他们正序显示
如:
id 姓名
2 张
3 李
高手,怎么办呢??
 
分兩步做
first
select top 2 id from 人员 where id<4 order by id desc
統計出id in (2,3)
second
select * from 人员 where id in (2,3) order by id
hoho
 
楼上的正解
select * from 人员 where id in (select top 2 id from 人员 where id < 4 order by id desc) order by id asc
 
en樓上的直接一句出來,很直觀,但是數據量大的話,這種直觀的速度慢
我寧願取兩次,麻煩點,但速度快:)
 
谢谢,如果我要查姓名等于张的后两条记录怎么写呢?
我这么写为什么不对:
sql:='select * from 人员 where id in (select top 2 id from 人员 where 姓名=:xm order by id desc) order by id';
adoquery1.close;
adoquery1.sql.clear;
adoquery1.sql.add(sql);
adoquery1.Parameters.ParamValues['xm']:='张';
adoquery1.Open;
 
ADOQuery1.Parameters.ParamByName('xm').Value:='张';
 
我寫的是:
sql:='select * from 人员 where id in (select top 2 id from 人员
where 姓名='''+张+''' order by id desc) order by id';
和你那個差不多吧,有甚麼不對的呢?
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
顶部