【问题标题】:MS Access - Problems using variables in WHERE clauseMS Access - 在 WHERE 子句中使用变量的问题
【发布时间】:2016-10-25 23:34:36
【问题描述】:

我有一个工作查询需要很长时间才能运行。它用于填充 Access 表单字段,其中包含按开始日期排序的不同合同列表。

以下查询返回多个商品(共享合约开始日期)的不同合约开始日期列表,其中合约开始日期 (DELSTART) 大于或等于当前日期 (PRICEDATE)。

函数returndelivery返回一个转换为双精度的合约的日期属性,函数returnnumericdate只是返回一个日期的双精度(yyyymmdd)。

SELECT DISTINCT (tblFuturesPrices.Period),
       returnnumericdate(returndelivery([PERIOD],"S")) AS DELSTART,
       ReturnNumericDate(Date()) AS PRICEDATE
FROM tblFuturesPrices
WHERE returnnumericdate(returndelivery([PERIOD],"S")) >= ReturnNumericDate(Date())
GROUP BY PERIOD
ORDER BY returnnumericdate(returndelivery([PERIOD],"S"));

理想情况下,我想在 where 子句中引用变量 DELSTART 和 PRICEDATE,但当我这样做时,Access 会提示输入变量值。我认为查询花费的时间比它应该的要长,因为我不得不多次使用我的用户定义函数。

源表 (tblFutures) 包含过去 6 个月的工作日内每种商品/合约的价格。

提前致谢。

【问题讨论】:

  • 优化器是否足够聪明,可以注意到returnnumericdate(returndelivery([PERIOD],"S")) 的三个重复只需要评估一次,或者将其推入派生表或VIEW 是否有帮助?
  • 我在想我可以填充一个临时表,该表仅在表单加载并且日期发生变化时才更新。我希望 DELSTART 声明将保存表值,并且稍后引用它们会更快。

标签: sql variables ms-access


【解决方案1】:

我认为查询花费的时间比应有的要长,因为我不得不这样做 多次使用我的用户定义函数。

就是这样。但是您可以减少这些功能:

returnnumericdate(returndelivery([PERIOD],"S")) >= ReturnNumericDate(Date())

没有什么不同
returndelivery([PERIOD],"S") >= Date()

不知道returndelivery是做什么的。

附录

过滤原始数据并创建一个新函数returndeliverydate,它的作用与returndelivery相同,只是返回一个日期值:

SELECT 
    tblFuturesPrices.Period,
    returndeliverydate([PERIOD],"S") AS DELSTART,
    Date() AS PRICEDATE
FROM 
    tblFuturesPrices
WHERE 
    returndeliverydate([PERIOD],"S") >= Date()

保存此查询并将其用作新查询中的源:

Select Distinct
    DELSTART,
    PRICEDATE
FROM 
    YourQuery

【讨论】:

  • 感谢您的评论,returndelivery 接受一系列合同交付名称,例如Nov16, Q1 17, Sum18 并以 double 形式返回合同的开始日期。访问是如此讨厌我放弃的日期,所以例如 returndelivery('Nov16','S') 会给你 20161101。
  • 我明白了。但是日期不是“讨厌的”,也不是什么神奇的东西,只是 Double 的一个子类型。在处理日期和时间时使用 Date 以外的任何东西只会造成比正确处理更多的麻烦。见附录。
  • 谢谢古斯塔夫。我几乎已经完成了每天在临时表中加载条带的操作,但会看看您对新功能的建议。
猜你喜欢
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-18
  • 1970-01-01
相关资源
最近更新 更多