我有一个出入库事务表,里面结构和部分数据如下 表名就假定是: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写的少!分不够我再开帖子给!
物料号 出库前数量 出库或入库的数量("-"代表出库) 出库或入库的时间
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写的少!分不够我再开帖子给!
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 個資料列)*/
--得到结果如下
-- mindate
--1 1记录取到,水平有限...不知道如何取整条记录
继续研究,忘高手解答
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