如何使用 Microsoft Access 按日期获取最新记录

How to get newest record by date using Microsoft Access

我正在尝试按日期获取最新记录,但 运行 遇到了麻烦。 "works" 但我收到的价格不正确。

我已经尝试了以下并且知道 Last(price) 是不正确的。

SELECT sku, Last(price), Max(start_date)
FROM myTable
WHERE price_id="LEV001"
GROUP BY sku;

示例数据

sku        start_date     price_id         price

ABC        1/1/2015       LEV001         124.99

ABC        11/2/2018      LEV001         121.99

ABC        3/7/2016       LEV001         112.99

ABC        12/2/2016      LEV002         134.99

期望的结果

ABC        11/2/2018       121.99

如果您想要整个 table 的最新记录,只需使用 ORDER BYTOP 1:

SELECT TOP 1 *
FROM mytable
WHERE price_id="LEV001"
ORDER BY start_date DESC

如果您想要每个 SKU 的最新记录 ,则有多种选择。一种方法是使用反left join:

select t.*
from mytable t
left join mytable t1 on t1.sku = t.sku and t1.price_id = t.Price_id and t1.start_date > t.start_date
where t.price_id = 'LEV001' and t1.sku is null
order by sku

如果您只需要一行,请使用 order bytop

SELECT TOP 1 t.*
FROM myTable as t
WHERE price_id = "LEV001"
ORDER BY start_date DESC;

如果你想要每个 sku 这个——你的代码建议——那么使用一个相关的子查询:

SELECT TOP 1 t.*
FROM myTable as t
WHERE t.price_id = "LEV001" AND
      t.start_date = (SELECT MAX(t2.start_date)
                      FROM myTable as t2
                      WHERE t2.price_id = t.price_id AND
                            t2.sky = t.sku
                     );

NOT EXISTS:

SELECT t.sku, t.price, t.start_date
FROM myTable AS t
WHERE t.price_id = "LEV001"
AND NOT EXISTS (
  SELECT 1 FROM myTable
  WHERE sku = t.sku AND price_id = t.price_id AND start_date > t.start_date
)