如何使用 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 BY
和 TOP 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 by
和 top
:
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
)
我正在尝试按日期获取最新记录,但 运行 遇到了麻烦。 "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 BY
和 TOP 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 by
和 top
:
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
)