日期:2014-05-16  浏览次数:20741 次

修改最近的一条记录
我想根据时间排序,修改时间离现在最近的那条记录,该如何做?
比如:
c1      c2      c3  
a       aa     2013-01-02
b       bb     2013-10-12
e       ee     2013-10-29


有这么几条记录,我想修改时间为2013-10-29那条记录,SQL语句应该如何写啊?

------解决方案--------------------
create table test_csdn(
       c1 varchar2(32),
       c2 varchar2(32),
       c3 date
);
insert into test_csdn
values('a','aa',to_date('2013-01-02','yyyy-mm-dd'));
insert into test_csdn
values('b','bb',to_date('2013-10-12','yyyy-mm-dd'));
insert into test_csdn
values('e','ee',to_date('2013-10-29','yyyy-mm-dd'));

update test_csdn set c1 = 'd',c2 = 'dd'
where months_between(sysdate,c3) in (
      select min(months_between(sysdate,c3)) 
      from test_csdn
);
------解决方案--------------------
是不是每天只有一条数据 ?如果日期相同 要根据什么再排序?

如果只是一天一条的话 直接查询最大的就行了

update tb
set c2 = ''
where c3 = (select max(c3) from tb1)

------解决方案--------------------
一天很多条也一样用啊
------解决方案--------------------
引用:
Quote: 引用:

是不是每天只有一条数据 ?如果日期相同 要根据什么再排序?

如果只是一天一条的话 直接查询最大的就行了

update tb
set c2 = ''
where c3 = (select max(c3) from tb1)


每天不只一条数据的,会有很多条 。


你多条要需要什么字段排序区别呢?不然会更新到多条记录、
像2楼所说,假如多条的话排序,取第一条就行。
------解决方案--------------------
select * from  table where rownum <= 1  order by  date desc

------解决方案--------------------
where c3=(select c3 from table where rownum<=1 order by c3 desc);