我有一个出入库事务表,里面结构和部分数据如下 表名就假定是:a
物料号              出库前数量               出库或入库的数量("-"代表出库)         出库或入库的时间
WLHAO(varchar)  CHKQSHLIANG(int)      CRKSHLIANG(int)                  CRKSHJIANG(Date)
001                   200                 20                               2008-12-21 10:23:23
001                   210                 40                               2008-12-23 11:46:53
001                   250                 -13                              2008-12-24 15:36:03需求是我想查截止到某个日期的某个物料的数量
比如:我查物料001在2008年12月20号的库存数量,
我的想法是:在出入库事务表中我只要找到大于2008年12月20号日期的并且最接近2008年12月20号的那次出入库记录(不用管是出库还是入库),找到那条记录,然后找出相应的出库前数量就行!按我的想法,结果就是我上面的第一条数据中的200就是!
我遇到的问题是:大于某个日期并最接近那个日期的sql语句怎么写?  还请各位高手帮忙,写日期的sql写的少!分不够我再开帖子给!

解决方案 »

  1.   

    select top 1 * from a where crkshjiang>@date order by crkshjiang
      

  2.   

    if object_id('tb')is not null drop table tb
    go
    create table tb(WLHAO varchar(10),  CHKQSHLIANG int,      CRKSHLIANG int, CRKSHJIANG datetime) 
    insert tb select '001' ,                 200     ,           20   ,                           '2008-12-21 10:23:23' 
    insert tb select '001' ,                 210      ,          40   ,                           '2008-12-23 11:46:53' 
    insert tb select '001',                  250      ,          -13 ,                             '2008-12-24 15:36:03' 
    select * from tb where CRKSHJIANG=(select top 1 CRKSHJIANG from tb where CRKSHJIANG>='2008-12-20')
    /*WLHAO      CHKQSHLIANG CRKSHLIANG  CRKSHJIANG                                             
    ---------- ----------- ----------- ------------------------------------------------------ 
    001        200         20          2008-12-21 10:23:23.000(影響 1 個資料列)*/
      

  3.   

    select top 1 CHKQSHLIANG from a where CRKSHJIANG>'2008-12-20' order by CRKSHJIANG
      

  4.   

    min(date-20081220)得到的是与20081220差最小的日期select min(convert(varchar,CRKSHJIANG,112)-20081220) as mindate from  test
    --得到结果如下
    --      mindate
    --1      1记录取到,水平有限...不知道如何取整条记录
    继续研究,忘高手解答
      

  5.   

    select top 1 CHKQSHLIANG  from(
    select top 1 CHKQSHLIANG,ABS(DATEDIFF (ms,CHKQSHLIANG,'2008-12-20')) DateParts from a where CRKSHJIANG<'2008-12-20' order by CRKSHJIANG DESC
    union all 
    select top 1 CHKQSHLIANG,ABS(DATEDIFF (ms,CHKQSHLIANG,'2008-12-20')) DateParts from a where CRKSHJIANG>'2008-12-20' order by CRKSHJIANG)
    b
     order by DateParts desc
      

  6.   

    高手已经来作答...忘记top关键字....
      

  7.   

    SELECT TOP 1 * FROM a WHERE CRKSHJIANG>'2008-12-20' ORDER BY CRKSHJIANG
      

  8.   

    select top 1 from table where datetime>'2009-2-6' order by datetime