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
);
我执行了以下查询:
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
);