Access SQL-在每个记录中仅包含开始的日期范围内进行分配

mvbentes

我正在使用Access 2010

我有两个表:

  1. 价格表,其中列出了该价格生效的时间。价格更新后,我会得到另一个包含新价格及其生效时间的记录。没有键,该表由两个字段(合同,产品代码)查询。
  2. 订单,我在其中订购了订购日期和价格。

我想做的是在价格表中检查下订单时哪个价格处于活动状态。我试图从Order PLUS中获取一个包含所有字段的表,并从表ContracPrices中获取适当的ContractedPrice和PriceValidFrom。

示例:示例解决的数据库(具有@carexcer贡献)

Orders
OrderNumber Contract    ProductCode OrderDate   PurchasePrice
Ord1    Cont1   AAA 07/05/2012  19,23
Ord1    Cont1   BBB 07/05/2012  5,66
Ord1    Cont1   CCC 07/05/2012  6,64

ContractPrices
Contract    ProductCode ContractedPrice PriceValidFrom
Cont1   AAA 21,14   11/02/2010 18:03:01
Cont1   AAA 21,84   08/10/2010 12:58:55
Cont1   AAA 22,06   22/06/2011 22:50:42
Cont1   AAA 1923,7  27/09/2011 14:17:08
Cont1   AAA 20      03/07/2012 12:40:36
Cont1   AAA 22,53   01/08/2012 21:37:26
Cont1   AAA 22,53   07/08/2012 19:33:29
Cont1   AAA 22,53   03/09/2012 18:26:38
Cont1   AAA 22,53   04/09/2012 16:20:09
Cont1   AAA 22,53   05/11/2012 18:53:18
Cont1   AAA 20      11/04/2013 15:28:49
Cont1   AAA 19,84   08/09/2013 19:00:10

DesiredResult
OrderNumber Contract    ProductCode OrderDate   PurchasePrice   ContractedPrice PriceValidFrom
Ord1    Cont1   AAA 07/05/2012  19,23   19,23   27/09/2011 14:17:08

请注意,我不限于从单个合同订购产品代码。与ProductCode的合同很多。

我将对VBA开放。我只是不知道如何在不离开Access环境的情况下解决问题。我是数据库新手。

我经过了蛮力测试,发现我们购买的商品的价格超出了合同规定的价格,因此想测试整个数据库。

我尝试搜索此问题,但无法简洁表达问题。

Carexcer

我认为此查询将解决您的问题:

SELECT
    t1.OrderNo, 
    t1.Contract,
    t1.ProductCode,
    MAX(t2.PriceValidityStartDate) as PriceValidityStartDate,
    MAX(t2.ContractPrice) AS PriceAtTime
FROM 
ORDERS t1 
LEFT OUTER JOIN 
ContractPrices t2
ON t1.Contract = t2.Contract AND t1.ProductCode = t2.ProductCode 
WHERE 
    t1.OrderDate > t2.PriceValidityStartDate
GROUP BY 
    t1.OrderNo, 
    t1.Contract,
    t1.ProductCode

您在这里使用sqlfiddle对其进行测试。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Access SQL中优化NOT IN查询

来自分类Dev

Microsoft Access SQL查询忽略年份的日期范围

来自分类Dev

MS Access SQL查询IP地址范围

来自分类Dev

SQL在日期范围内的分割数

来自分类Dev

Access SQL-在每个记录中仅包含开始的日期范围内进行分配

来自分类Dev

SQL Server在日期范围内的聚合

来自分类Dev

SQL选择日期范围内未包含日期的记录

来自分类Dev

Oracle SQL过滤器在两个日期之间的结果,但仅显示时间范围内的记录

来自分类Dev

Access SQL查询-选择当月特定日期的日期范围

来自分类Dev

Access SQL-多个日期匹配的地方

来自分类Dev

如何在日期范围内过滤SQL Server中的特定记录而不删除其他记录?

来自分类Dev

Access VBA中的SQL查询

来自分类Dev

SQL Access中的SumIF

来自分类Dev

Access中的SQL Server查询

来自分类Dev

MS Access SQL查询IP地址范围

来自分类Dev

Access中的sql匹配

来自分类Dev

SQL Access,仅当另一列中的所有值都在指定范围内时,才求和一列的值

来自分类Dev

SQL:查找具有给定日期范围内每个月的数据的记录

来自分类Dev

Access SQL中的联接语句

来自分类Dev

Access SQL:如何查找日期之间的重复记录

来自分类Dev

SQL选择范围内的日期

来自分类Dev

从SQL填充Access表,在Access中自动生成ID字段

来自分类Dev

在Access SQL中取消透视

来自分类Dev

SQL-获取日期范围内的记录,包括 当天记录

来自分类Dev

SQL 速度:返回日期范围内的每个日期和每个日期的 count()

来自分类Dev

MS Access SQL 日期范围查询

来自分类Dev

Microsoft Access SQL - 选择记录的最新“版本”

来自分类Dev

Access SQL:如何从视图分组(Access SQL 中的子查询)?

来自分类Dev

SQL - 如何为给定范围内的每个日期选择最新的可用记录

Related 相关文章

  1. 1

    在Access SQL中优化NOT IN查询

  2. 2

    Microsoft Access SQL查询忽略年份的日期范围

  3. 3

    MS Access SQL查询IP地址范围

  4. 4

    SQL在日期范围内的分割数

  5. 5

    Access SQL-在每个记录中仅包含开始的日期范围内进行分配

  6. 6

    SQL Server在日期范围内的聚合

  7. 7

    SQL选择日期范围内未包含日期的记录

  8. 8

    Oracle SQL过滤器在两个日期之间的结果,但仅显示时间范围内的记录

  9. 9

    Access SQL查询-选择当月特定日期的日期范围

  10. 10

    Access SQL-多个日期匹配的地方

  11. 11

    如何在日期范围内过滤SQL Server中的特定记录而不删除其他记录?

  12. 12

    Access VBA中的SQL查询

  13. 13

    SQL Access中的SumIF

  14. 14

    Access中的SQL Server查询

  15. 15

    MS Access SQL查询IP地址范围

  16. 16

    Access中的sql匹配

  17. 17

    SQL Access,仅当另一列中的所有值都在指定范围内时,才求和一列的值

  18. 18

    SQL:查找具有给定日期范围内每个月的数据的记录

  19. 19

    Access SQL中的联接语句

  20. 20

    Access SQL:如何查找日期之间的重复记录

  21. 21

    SQL选择范围内的日期

  22. 22

    从SQL填充Access表,在Access中自动生成ID字段

  23. 23

    在Access SQL中取消透视

  24. 24

    SQL-获取日期范围内的记录,包括 当天记录

  25. 25

    SQL 速度:返回日期范围内的每个日期和每个日期的 count()

  26. 26

    MS Access SQL 日期范围查询

  27. 27

    Microsoft Access SQL - 选择记录的最新“版本”

  28. 28

    Access SQL:如何从视图分组(Access SQL 中的子查询)?

  29. 29

    SQL - 如何为给定范围内的每个日期选择最新的可用记录

热门标签

归档