MS Access - 在WHERE子句

时间:2016-10-25 11:28:39

标签: sql variables ms-access

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

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

函数returndelivery返回转换为double的合约的date属性,函数returnnumericdate只返回日期的一个double(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个月的工作日。

提前致谢。

1 个答案:

答案 0 :(得分:0)

  

我认为查询需要更长的时间,因为我不得不这样做   多次使用我的用户定义函数。

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

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

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

不知道 returndelivery 做了什么。

<强>附录

过滤原始数据并创建一个与 returndelivery 相同的新函数 returndeliverydate ,但返回Date值:

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

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

Select Distinct
    DELSTART,
    PRICEDATE
FROM 
    YourQuery