SQL语句,找最近的值;

87 篇文章 3 订阅
75 篇文章 1 订阅

在一个项目中,,

由于产品的单价经过会变,,但是在为员工计算提成时,需要使用做货时的单价来计算他的工资。

这就要找到最近的单价来进行计算。

(以下代码在 SQL2008R2中测试)


CREATE TABLE #TEMP_A (
	CPBH VARCHAR(10),
	RQ SMALLDATETIME,
	DJ MONEY
	)
	
CREATE TABLE #TEMP_B(
	ID INT IDENTITY(1,1),
	CPBH VARCHAR(10),
	RQ SMALLDATETIME,
	DJ MONEY
)

INSERT INTO #TEMP_A
VALUES
('001','2011-01-01',1),
('001','2011-03-01',2),
('001','2011-06-01',3),
('001','2011-07-01',4),
('001','2011-09-01',5),
('002','2011-01-01',1),
('002','2011-02-01',2),
('002','2011-04-01',3),
('002','2011-07-01',4),
('002','2011-09-01',5)

INSERT INTO #TEMP_B(CPBH,RQ)
VALUES
('001','2011-01-05'),
('001','2011-02-02'),
('001','2011-05-01'),
('001','2011-08-01'),
('002','2011-01-05'),
('002','2011-03-05'),
('002','2011-05-05'),
('002','2011-10-05')



UPDATE #TEMP_B SET DJ=A.DJ
FROM #TEMP_A A
WHERE #TEMP_B.CPBH =A.CPBH 
	AND A.RQ=(SELECT MAX(B.RQ) 
				FROM #TEMP_A B 
				WHERE #TEMP_B.RQ>=B.RQ AND A.CPBH=B.CPBH)


SELECT * FROM #TEMP_B
	
DROP TABLE #TEMP_A
DROP TABLE #TEMP_B

/*
结果
ID          CPBH       RQ                      DJ
----------- ---------- ----------------------- ---------------------
1           001        2011-01-05 00:00:00     1.00
2           001        2011-02-02 00:00:00     1.00
3           001        2011-05-01 00:00:00     2.00
4           001        2011-08-01 00:00:00     4.00
5           002        2011-01-05 00:00:00     1.00
6           002        2011-03-05 00:00:00     2.00
7           002        2011-05-05 00:00:00     3.00
8           002        2011-10-05 00:00:00     5.00

*/





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值