数据库为Oracle,表A中:name和Date组成复合关键字
Name     Date
mike   2-一月-2004
rose   1-二月-2004
john   7-一月-2004
mike   5-二月-2004
rose   5-一月-2004
假如我给定日期为:4-一月-2004,想求出mike和rose的最近一条记录,如表B
Name    Date
mike   2-一月-2004
rose   5-一月-2004
也就是我想求出表A中,指定Name下,日期值与给定日期之差的绝对值最小的记录。不知各位理解我的意思没有?
这样的Sql语句该如何写?

解决方案 »

  1.   

    select max(date),name from a group by name
      

  2.   

    oracle没有用过,给你一个思路,按照name分组,取其最大的日期记录
    select max(date),name from a where date<= xxxx group by name
    max是指date的最大值,不知道oracle中用什么函数
      

  3.   

    我的意思是:原表中对应每个Name可能有多条记录,但我需要取出的Name不重复,且对应每个Name取出的记录中的Date值是距离我指定的日期最近的!不知道这样说高手们能否明白我的意思啊?
        比如:A表中有mike的两条记录,但我只取( mike   2-一月-2004 )这一条,因为这一条中的Date值距离我指定的( 4-一月-2004 )最近,而(mike   5-二月-2004 )中的Date距离(4-一月-2004 )较远,就不取这条记录。
        请问应该怎样写Sql语句呢?
      

  4.   

    Select t2.Name, t3.Date from 
        (select t.Name, min(DateBetween) as DateBetween from 
            (select Name, Date, 
               greatest(Date, to_date('2003-06-12','yyyy-mm-dd'))-
               least(Date,to_date('2003-06-12','yyyy-mm-dd')) as DateBetween 
            from A) t
        group by t.Name) t2, 
        (select Name, Date, 
               greatest(Date, to_date('2003-06-12','yyyy-mm-dd'))-
               least(Date,to_date('2003-06-12','yyyy-mm-dd')) as DateBetween 
        from A) t3
    where t3.Name=t2.Name and t2.DateBetween =t3.DateBetween
      

  5.   

    偶测试过了,是正确的,但如果数据库中有相同Name, Date的话。会产生相同Name,Date的多条记录。
      

  6.   

    oracle中有没有计算两个日期之间差值和一个数的绝对值的函数?
    如果有的话
    select min(绝对值(差值(日期,指定日期))),name from a group by name
      

  7.   

    请问各位,在用函数TO_DATE时,需要把什么单元包括进来么?我用TO_DATE('2004-09-02','yyyymmdd')时总报错误
      

  8.   

    不要吧,是不是你的语名写错了,  如果在delphi 中  应该注意引号的问题例如:
       
         Query1.sql.add('select * from table  where To_Date('''+ string变量+''',''yyyymmdd'')');