2011-07-28 82 views
12

好吧,我已经查看了其他解决方案并没有帮助。所以这就是我想要做的。 我需要选择具有多列的行,其中一列中的值是最大值。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 

我想我试过每个组合的选择最大(orderfileid)我可以想到

任何帮助将appriciated。 谢谢

+0

东西:',ITEM_COST,从接单到订单仓库ITEM_NUMBER通过不同的选择ITEM_NUMBER,orderfileid,orderfileid desc'也许? – PtPazuzu

回答

14

您需要在子查询中找到您的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 
+0

谢谢。在尝试此解决方案时,我得到了不同的结果。也许我输入了错误的内容,但我只通过一个唯一的条目获得了值,我得到的是项目编号6789的结果,而不是其他项。当然,我没有使用这个简化的数据集,因此我可能会在翻译中丢失 –

+0

@larry:我已经确认,我写的查询返回了您提供的样本数据集的预期结果。 –

+0

谢谢我会继续调整并让你知道结果。感谢让我接下来的一步。 –

2
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 
0

尝试

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

不可以。您正在为整个表格选择'max(orderfileid)',而不是基于每个ItemNumber。 –

+0

哦,对,现在我明白了,我完全误读了这个问题! –

-2

我想你正在寻找的是 “有” 的条款。看看this

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

+0

进行后处理评估并且几乎总是次优。 – Konchog

0

可以参照类似的问题上如何使用组分区和采摘每个分区一个MySQL的事情

Deleting Rows: No Single Member Has More Than x Records

这类似于甲骨文在做什么军衔。我以前的帖子是针对oracle的。我的不好..

+0

MySQL没有窗口函数。 –

0

我甚至不会使用Max。只要结合GROUP BY和ORDER BY

SELECT * FROM orders GROUP BY item_number ORDER BY orderfileid DESC 

则最低只需更改到ASC的线间

+1

否,因为OP只需要每件商品中的1件,而不是订单域订购商品的所有实例。 注:我证明了死灵,因为答案是死灵 –

相关问题