使用SQL-handle相同值提取Access中对象名的最大值

使用SQL-handle相同值提取Access中对象名的最大值,sql,ms-access,group-by,Sql,Ms Access,Group By,我在Access数据库中有一个包含客户和产品信息的表: custID product price -------------------- 1 objectA 12,5 1 objectB 54,51 1 objectC 14,85 2 objectE 188,84 2 objectC 14,85 2 objectD 188,84 从该表中,我希望得到客户通过SQL购买的最昂贵的产品。我试过这个: SELECT a.custID, a.product

我在Access数据库中有一个包含客户和产品信息的表:

custID product price
--------------------
1   objectA   12,5
1   objectB   54,51
1   objectC   14,85
2   objectE  188,84
2   objectC   14,85
2   objectD  188,84
从该表中,我希望得到客户通过SQL购买的最昂贵的产品。我试过这个:

SELECT a.custID, a.product, max(a.price)
FROM orders AS a INNER JOIN orders AS b ON (a.custID=b.custID) AND (a.price<=b.price)
GROUP BY a.product, a.custID
HAVING count(*)<2;
它适用于最高价格只出现一次的所有情况,但在两个产品具有相同(最高)价格时失败。如何确保为每个客户获得结果?(我不在乎是反对还是反对客户2)

只是旁注:
如果您有一个支持窗口功能的更高级的SQL server,比如SQL server 2008,您可以改为编写

SELECT custID, product, price FROM (
    SELECT custID, product, price,  ROW_NUMBER()
        OVER (partition by custid order by price desc) AS rowNo
    FROM orders 
) AS a
WHERE a.rowNo = 1
只是旁注:
如果您有一个支持窗口功能的更高级的SQL server,比如SQL server 2008,您可以改为编写

SELECT custID, product, price FROM (
    SELECT custID, product, price,  ROW_NUMBER()
        OVER (partition by custid order by price desc) AS rowNo
    FROM orders 
) AS a
WHERE a.rowNo = 1

BTW sql是通用标记,不引用sql Server。BTW sql是通用标记,不引用sql Server。
SELECT custID, product, price FROM (
    SELECT custID, product, price,  ROW_NUMBER()
        OVER (partition by custid order by price desc) AS rowNo
    FROM orders 
) AS a
WHERE a.rowNo = 1