2011-07-28 117 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件,而不是訂單域訂購商品的所有實例。 注:我證明了死靈,因爲答案是死靈 –

相關問題