在Access数据库中有两个表。
表1包含文章,表2包含价格。
所以文章是所有文章和价格的描述 表只包含商品编号,日期日期和价格。 如果价格发生变化,价格会增加新的一行。
价格具有使用该价格的日期。
现在我想获得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?
此选择的正确形式是什么?
答案 0 :(得分: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
;