0

在 Access 数据库中有两个表。

表一包含文章,表二包含价格。

所以文章是所有文章的描述,价格表只包含文章编号、日期和价格。如果价格发生变化,则会在价格中添加一个新行。

价格具有使用该价格的日期。

现在我想获取 2012 年 10 月 1 日有效的价格。我使用了对当前价格的查询并添加and prsdat<#02/10/2012# 到查询中的子选择中。

这是我已经拥有的:

SELECT 
    Articles.ARTNR, 
    Articles.TXT, 
    Articles.ACTIVE, 
    Prices.PRICE, 
    Prices.PRSGR, 
    Prices.PRSDAT
FROM 
    Articles INNER JOIN Prices ON Articles.ARTNR = Prices.ARTNR
WHERE 
    (((Articles.ACTIVE)="Y") AND 
    ((Prices.PRSGR)=0) AND 
    ((Prices.PRSDAT)=
        (SELECT 
            max(prsdat)  
        FROM 
            Prices as art 
        WHERE 
            art.artnr = Prices.artnr and prsdat<#02/10/2012#)))
ORDER BY 
    Articles.ARTNR;

现在选择返回我以前使用的选择没有看到的文章,刚刚添加了and prsdat<#01/10/2012#. 结果现在是 430 篇文章,之前我只有大约 260 篇。

返回的价格较旧,但我不确定日期格式。在表中我看到 DD.MM.YYYY,在查询中我应该使用 MM/DD/YYYY 还是 DD/MM/YYYY?

这个选择的正确形式是什么?

4

1 回答 1

2
SELECT 
    a.ARTNR
    , a.TXT
    , a.ACTIVE -- dubious, since it is constant
    , p.PRICE
    , p.PRSGR  -- dubious, since it is constant
    , p.PRSDAT
FROM Articles a
INNER JOIN Prices p ON a.ARTNR = p.ARTNR
WHERE a.ACTIVE = 'Y' 
  AND p.PRSGR = 0 
  AND p.prsdat < #02/10/2012#
  AND NOT EXISTS (
      SELECT *   
      FROM Prices nx 
      WHERE nx.ARTNR = p.ARTNR
        AND nx.PRSGR = 0
        AND nx.prsdat < #02/10/2012#
        AND nx.prsdat > p.prsdat
          )
ORDER BY 
    Articles.ARTNR
   ;
于 2013-03-16T14:36:49.393 回答