【问题标题】:Select first three rows for each ID为每个 ID 选择前三行
【发布时间】:2018-06-14 11:42:45
【问题描述】:

我已经执行了以下查询:

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 似乎不支持。

【问题讨论】:

    标签: sql ms-access-2010


    【解决方案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
                                     );
    

    【讨论】:

    • 可能需要修复子查询的别名。它目前显示from DBLocations l,但我认为您的意图是from DB Locations l2
    • 谢谢,你让它看起来很简单!
    猜你喜欢
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2013-06-25
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多