select id1, id2 top 1 from table
where date <='2001-10-21'
order by date descselect id1, id2 top 1 from table
where date >='2001-10-21'
order by date 

解决方案 »

  1.   

    可以使用建立临时视图的方法来解决。
    select ID1, 数量 from TABLE as A, (select ID1 ,max(日期) as TrueDate
    from TABLE group by ID1) as B 
    where A.ID1=B.ID1 AND a.日期=b.TrueDate完了。
      

  2.   

    可以使用建立临时视图的方法来解决。
    select ID1, 数量 from TABLE as A, (select ID1 ,max(日期) as TrueDate
    from TABLE group by ID1) as B 
    where A.ID1=B.ID1 AND a.日期=b.TrueDate完了。
      

  3.   

    气死我了,刚才居然怎么都发不上去。
    建临时视图就可以解决。
    Select A.ID1, A.数量 from TABLE as A,
    (Select ID1,max(日期) AS TRUEDATE from TABLE group by ID1) as B
    Where A.ID1=B.ID1 and A.日期=B.TRUEDATE完了。
      

  4.   

    啊,我不是故意的!
    里面临时视图还少了一个条件,就是应该是Select A.ID1, A.数量 from TABLE as A,
    (Select ID1,max(日期) AS TRUEDATE from TABLE 
    where 日期<='2001-10-21' group by ID1) as B
    Where A.ID1=B.ID1 and A.日期=B.TRUEDATE才对。
      

  5.   

    上面的方法,只能给出一个日期啊,
    未完全解决的内容,(我们的方法不太好)
    如果给出一个日期段,怎么办,我们要得到这个日期段内,所有日期数据。
    比如:2001-10-19-》2001-10-21
    ID1=01 日期=2001-10-19....数据库中没有,应输出为  01 2001-10-19 0 (数量为0)
    ID1=01 日期=2001-10-20....数据库中有,应输出为  01 2001-10-20 100 (数量为100)
    ID1=01 日期=2001-10-21....数据库中没有,应输出为  01 2001-10-21 100 (数量为100)
    求解
      

  6.   

    好像第二问反而要比第一问简单
    select id1,日期,数量 from table where 日期 between '2001-10-19' and '2001-10-21' order by id1
    至于数据库中不存在的日期如2001-10-19显然要在客户端处理,
    第一问的要用一句sql写出来,我看一个inner join是少不了的,所以效率也不会高
    你想效率高的话就用临时存储过程吧
      

  7.   

    : wjying(葡萄) 
    是啊,给出范围,就可以,得到有的记录,,
    可是其中日期没有的记录,就没有办法生成吗?
      

  8.   

    数据库里没有的东西怎么可能平白的生出来
    数据库返回的数据要么是原来就有的要么是统计数据
    当然case 
       when a=1 then field=1
       when a=2 then dield=2
       end
    这类数据除外
      

  9.   

    晕啊,如果在客户端处理很慢的
    比如500种ID1,363天,
    ID2如果是5的话
    很大的数据处理量
    我们用过这样的方法,很慢很慢很慢