| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3519 人关注过本帖
标题:取最近一次单价的SQL语句求助!
只看楼主 加入收藏
davyxjc
Rank: 2
等 级:论坛游民
帖 子:130
专家分:76
注 册:2009-6-30
结帖率:70.37%
收藏
已结贴  问题点数:5 回复次数:5 
取最近一次单价的SQL语句求助!
有A和B两个表:A为报价表,B为销售订单表
A表                                                       B表
报价单号    日期       产品编码      价格                 销售单号        日期       产品编码      
Q001      2011-07-01   JD001         0.5                  S001          2011-07-05   JD001
Q001      2011-07-01   JD002         0.6                  S001          2011-07-05   JD002
Q002      2011-07-20   JD001         0.55                 S002          2011-07-25   JD001
Q003      2011-09-01   JD001         0.52                 S003          2011-09-10   JD001
Q004      2011-09-06   JD001         0.53
现在要用一条SQL语句,把A表中的日期小于B表中日期的最大日期而产品编码相同的价格引到B表中,引入规则是:
如上面S001 的日期是2011-07-05,A表中小于此日期的只有Q001一条记录.
S002的日期是2011-07-25,A表中小于此日期的记录有两条(Q001和Q002),但Q002是2011-07-25之前的最后一次报价(日期更大的),所以取价格时应该取Q002的0.55,依此类推
得出的报表是:
销售单号            日期         产品编码         价格
S001               2011-07-05    JD001            0.5
S001               2011-07-05    JD002            0.6
S002               2011-07-25    JD001            0.55
S003               2011-09-10    JD001            0.53
请问这样的SQL语句怎样写?谢谢大家
搜索更多相关主题的帖子: 产品 销售 报价单 
2011-09-19 22:34
davyxjc
Rank: 2
等 级:论坛游民
帖 子:130
专家分:76
注 册:2009-6-30
收藏
得分:0 
自已顶一下
2011-09-20 10:56
暗尘
Rank: 2
等 级:论坛游民
帖 子:22
专家分:37
注 册:2011-9-15
收藏
得分:3 
有A和B两个表:A为报价表,B为销售订单表
A表                                                       B表
报价单号    日期       产品编码      价格                 销售单号        日期       产品编码      
Q001      2011-07-01   JD001         0.5                  S001          2011-07-05   JD001
Q001      2011-07-01   JD002         0.6                  S001          2011-07-05   JD002
Q002      2011-07-20   JD001         0.55                 S002          2011-07-25   JD001
Q003      2011-09-01   JD001         0.52                 S003          2011-09-10   JD001
Q004      2011-09-06   JD001         0.53
现在要用一条SQL语句,把A表中的日期小于B表中日期的最大日期而产品编码相同的价格引到B表中,引入规则是:
如上面S001 的日期是2011-07-05,A表中小于此日期的只有Q001一条记录.
S002的日期是2011-07-25,A表中小于此日期的记录有两条(Q001和Q002),但Q002是2011-07-25之前的最后一次报价(日期更大的),所以取价格时应该取Q002的0.55,依此类推
得出的报表是:
销售单号            日期         产品编码         价格
S001               2011-07-05    JD001            0.5
S001               2011-07-05    JD002            0.6
S002               2011-07-25    JD001            0.55
S003               2011-09-10    JD001            0.53



declare @c int     --定义变量 条数
select @c=count(*)from A,B where A.日期< B.日期 and A.产品编号=B.产品编号       --满足条件的列数
if(@c=1)   --判断 只有一条时
  begin
    select A.销售单号,B.日期,A.产品编号,A.价格  from A,B where A.日期< B.日期 and A.产品编号=B.产品编号
  end
 else if(@c=0)  --一条没有时
   begin
  print '不存在'
   emd
 else            --多条时
  begin
  select  A.销售单号,B.max(日期),A.产品编号,A.价格  from A,B where A.日期< B.日期 and A.产品编号=B.产品编号  
    emd
 
 -----没运行过 不晓得代码错没  反正原理是这样思考的 这是我想到最简洁的方法 不晓得行不行 你自己也可以多想想....

 
  
 
 
2011-09-20 14:39
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:3 
没有见到你的B表有价格列.  也许你只需要根据A表找出符合条件的价格即可?

先根据"A表中的日期小于B表中日期的最大日期而产品编码相同"条件形成一个临时表(包含产品编码, B的日期, A表中的日期小于B表中日期的最大日期而产品编码相同)

       select B.ProductID, B.BDate, MAX(A.Adate) TDate
       from A join B on A.ProductID = B.ProducID AND A.ADate < B.BDate
       group by B.ProductID, B.BDate

然后用A表,B表同时与这个临时表进行连接.

select      B.*, A.Price
from        (
              select B.ProductID, B.BDate, MAX(A.Adate) TDate
              from A join B on A.ProductID = B.ProducID AND A.ADate < B.BDate
              group by B.ProductID, B.BDate

            ) TempTB
            join A on A.ProductID =TempTB.ProductID and A.ADate = TempTB.TDate
            join B on B.ProductID = TempTB.ProductID and B.BDate = TempTB.BDate
2011-09-21 01:15
png
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:126
专家分:880
注 册:2010-10-6
收藏
得分:0 
同样的思路,也可以用相关子查询,

select    TableB.*,         
         (select    A2.Price
          from      TableA A2
          where     A2.ProductID = B.ProductID
                    and
                    A2.Adate =
                             (
                               select  max(A1.Adate) MostRecentDate
                               from   TableA A1
                               where  A1.ProductID = B.ProductID and A1.Adate < B.Bdate
                               group by A1.ProductID
                             )
         ) MostRecentPrice
from    TableB
2011-09-21 22:00
zhang_z1h2t3
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-9-19
收藏
得分:0 
回复 5楼 png
如果在ACCES数据库里可以实现,好像在SQL数据库里,时间类型的数据比较需要进行字段的截取吧
2011-09-28 21:44
快速回复:取最近一次单价的SQL语句求助!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.085250 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved