代码之家  ›  专栏  ›  技术社区  ›  Elia

为每个ID选择前三行

  •  0
  • Elia  · 技术社区  · 7 年前

    我已执行以下查询:

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

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

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

    此外,如果有一种方法可以在MS Access中执行这种过滤,而无需手动编写查询,那么如果有人指出这一点,那将是非常棒的。
    注意:我尝试在分区上使用Row\u Number(),但MS Access似乎不支持这一点。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    以下是MS访问的一种方法:

    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
                                     );