SQL根据一列中的最大值选择多个列

时间:2011-07-28 14:34:11

标签: mysql sql

好的,所以我看了其他解决方案没有任何帮助。所以这就是我想要做的。 我需要选择具有多列的行,其中一列中的值是最大值。

这里是样本数据

    orderfileid item number item cost   warehouse
    1           1234        3.45             ATL
    1           2345        1.67             DFW
    3           2345        2.45             NYY
    3           678         2.4              ORD
    2           1234        1.67             DFW

我需要选择orderfileid为每个唯一商品编号

的最大行

返回的数据集应该看起来像

    orderfileid item number item cost   warehouse
    2           1234        1.67             DFW
    3           2345        2.45             NYY
    3           6789        2.4              ORD

我想我尝试了我能想到的选择max(orderfileid)的每个组合

任何帮助都会得到满足。 感谢

6 个答案:

答案 0 :(得分:15)

您需要在子查询中找到MAX值,然后使用这些结果连接到主表以检索列。

SELECT t.OrderFileId, t.ItemNumber, t.ItemCost, t.Warehouse
    FROM YourTable t
        INNER JOIN (SELECT ItemNumber, MAX(OrderFileId) AS MaxOrderId
                        FROM YourTable
                        GROUP BY ItemNumber) q
            ON t.ItemNumber = q.ItemNumber
                AND t.OrderFileId = q.MaxOrderId

答案 1 :(得分:3)

select 
    t.* 
from 
    table t 
    inner join (
        select itemnumber, max(orderfileid) maxof
        from table
        group by itemnumber
    ) m on t.itemnumber = m.itemnumber 
            and t.orderfileid = m.maxof

答案 2 :(得分:1)

我甚至不会使用Max。只需组合GROUP BY和ORDER BY

SELECT * FROM orders GROUP BY item_number ORDER BY orderfileid DESC

然后最小化只更改为ASC

答案 3 :(得分:0)

尝试

SELECT * FROM `TABLE` WHERE orderfileid=(select max(orderfileid) from TABLE)

答案 4 :(得分:0)

你可以参考类似的问题,如何使用分区分组并在mysql中为每个分区选择一个

Deleting Rows: No Single Member Has More Than x Records

这与在Oracle中排名相似。我以前的帖子是为了oracle。我的坏..

答案 5 :(得分:-2)

我认为你要找的是“有”条款。看看this

通过具有max(itemnumber)的orderfileid从MyTable组中选择orderfileid,max(itemnumber),itemcost,仓库;