为每个ID选择前三行

时间:2018-01-04 17:21:35

标签: sql ms-access-2010

我执行了以下查询:

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

之后,我一直在努力选择最多3个最近的仓库,每个仓库都有一个产品 - LocationDistanceIndex列(也可能没有,1或2)。

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

此外,如果有一种方法可以在MS Access中没有手动编写的查询来执行此类过滤,那么如果有人指出这一点,那将会很棒。
注意:我尝试使用Row_Number()Over Partition但MS Access似乎不支持。

1 个答案:

答案 0 :(得分:1)

以下是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
                                 );