返回信息流SQL语句中有select top ,却没有select last.
无奈之下,只好用游标,
set @var=CURSOR FOR SELECT * FROM tablename
OPEN @var
FETCH LAST FROM @var.....
不知有没有高效一些的方法?
这是一条镜像帖。来源:北邮人论坛 / database / #211同步于 2006/10/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖
select表中最后一行的方法?
michaeldy
2006/10/17镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
可以加一个自增的字段然后倒序查一个
【 在 michaeldy (michael) 的大作中提到: 】
: SQL语句中有select top ,却没有select last.
: 无奈之下,只好用游标,
: set @var=CURSOR FOR SELECT * FROM tablename
: ...................
我的C++程序每5秒钟向表中添加一条新记录,以time(数据写入表的时间)为表的主键(此列为datetime类型),要达到选出表的最后一行的目的就要选择具有max(time)的那一行。但是我写了个sql语句有错误:
select * from TableName
where time=max(time)
sql查询分析器报错:聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。
不知该如何改正?thanks!
没有必要搞得那么复杂吧。order by time desc limit 1 就可以了吧
这个是mysql的句法,其他数据库的语法应该也差不多。
【 在 michaeldy (michael) 的大作中提到: 】
: 我的C++程序每5秒钟向表中添加一条新记录,以time(数据写入表的时间)为表的主键(此列为datetime类型),要达到选出表的最后一行的目的就要选择具有max(time)的那一行。但是我写了个sql语句有错误:
: select * from TableName
: where time=max(time)
: ...................
我的看法,用max(time)很影响效率,如果表的数据量太大的话;如果你能保证每5秒添加记录的话,可以用数据库里的时间函数,oracle: time>sysdate-interval '5' sec 语句大概是这样的,我也挺长时间没用了。再有可以用序列,获取最近插入的一条记录。
oracle里可以使用:select * from table_name order by column_name desc
where rownum <2;