Select 每个 ID 的前三行

Select first three rows for each ID

我执行了以下查询:

SELECT ProductID, Quantity, Location 
FROM DBLocations
ORDER BY ProductID, LocationDistanceIndex DESC;

之后,我一直在尝试 select 最多 3 个最近的仓库,每个仓库都有每个产品 - LocationDistanceIndex 列(也可能有 none,1 或 2 ).

我将如何编写查询以保留每个 ProductID 的最多 3 条记录 - LocationDistanceIndex 最高的 3 条记录因此按降序排列。

此外,如果有一种方法无需在 MS Access 中手动编写查询即可执行此类过滤,如果有人指出这一点,那就太好了。
注意:我尝试在分区上使用 Row_Number(),但 MS Access 似乎不支持。

这是 MS Access 的一种方法:

SELECT l.*
FROM DBLocations l
WHERE l.LocationDistanceIndex IN (SELECT TOP 3 l2.LocationDistanceIndex
                                  FROM DBLocations l2
                                  WHERE l.ProductID = l2.ProductID
                                  ORDER BY l2.LocationDistanceIndex DESC
                                 );