日期:2014-05-17  浏览次数:20539 次

MSSQL2000求最近采购日期单价
MSSQL2000求最近采购日期单价
环境:MSSQL2000
数据源表purchasedetail, 可否把结果转化为视图吗?

billid,itemno,billcode,billdate,materialid,price
1     ,  1   ,pc001,2012-10-10,10001, 2.5
1     ,  2   ,pc001,2012-10-10,10003, 3.0

3     ,  1   ,pc002,2012-10-10,10001, 2.6

4     ,  1   ,pc000,2012-10-19,10001,  2.3    

求物料最近采购单价 (如果是当天有多笔业务则最大单价)

  where  billdtate<='2012-10-10'如果如下
billid,itemno,billcode,billdate,materialid,price
1     ,  2   ,pc001,2012-10-10,10003, 3.0
3     ,  1   ,pc002,2012-10-10,10001, 2.6

  where  billdtate<='2012-10-19'如果如下
billid,itemno,billcode,billdate,materialid,price
1     ,  2   ,pc001,2012-10-10,10003, 3.0
4     ,  1   ,pc000,2012-10-19,10001,  2.3    
------最佳解决方案--------------------
---------------------------------
--  Author: HEROWANG(让你望见影子的墙)
--  Date  : 2012-10-21 17:58:16
--  blog  : blog.csdn.net/herowang
---------------------------------
 
IF OBJECT_ID('[tb]') IS NOT NULL 
    DROP TABLE [tb]
go
CREATE TABLE [tb] (billid INT,itemno INT,billcode VARCHAR(5),billdate DATETIME,materialid INT,price NUMERIC(2,1))
INSERT INTO [tb]
SELECT 1,1,'pc001','2012-10-10',10001,2.5 UNION ALL
SELECT 1,2,'pc001','2012-10-10',10003,3.0 UNION ALL
SELECT 3,1,'pc002','2012-10-10',10001,2.6 UNION ALL
SELECT 4,1,'pc000','2012-10-19',10001,2.3

select * from [tb] t 
where not exists(select 1 from tb where materialid=t.materialid and price>t.price )
      and  billdate<='2012-10-19'

------其他解决方案--------------------
我奇怪为什么19号之后两条?而且你的表主键是什么?
CREATE TABLE purchasedetail (billid INT,itemno INT,billcode VARCHAR(5),billdate DATETIME,materialid INT,price NUMERIC(2,1))
 INSERT INTO purchasedetail
 SELECT 1,1,'pc001','2012-10-10',10001,2.5 UNION ALL
 SELECT 1,2,'pc001','2012-10-10',10003,3.0 UNION ALL
 SELECT 3,1,'pc002','2012-10-10',10001,2.6 UNION ALL
 SELECT 4,1,'pc000','2012-10-19',10001,2.3
 
 SELECT  *
 FROM    purchasedetail a
 WHERE   EXISTS ( SELECT 1
                  FROM   ( SELECT    MAX(price) price ,billid,
                                     billdate
                  &nb