2011-07-28 52 views
12

OK vì vậy tôi đã xem xét các giải pháp khác không giúp ích gì. Vì vậy, đây là những gì tôi đang cố gắng làm. Tôi cần chọn hàng có nhiều cột trong đó giá trị trong một cột là giá trị tối đa.SQL Chọn nhiều cột dựa trên giá trị lớn nhất trong một cột

đây là dữ liệu mẫu

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 

tôi cần phải chọn toàn bộ hàng nơi orderfileid là tối đa cho mỗi số hạng mục độc đáo

dataset trở nên trông giống như

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

Tôi nghĩ rằng tôi đã thử mọi kết hợp của chọn tối đa (orderfileid) tôi có thể nghĩ đến

Bất kỳ trợ giúp nào sẽ được đánh giá cao. cảm ơn

+0

một cái gì đó giữa các dòng: 'chọn ITEM_NUMBER biệt, orderfileid, ITEM_COST, kho từ trật tự đơn đặt hàng bởi ITEM_NUMBER, orderfileid desc' lẽ ? – PtPazuzu

Trả lời

14

Bạn cần tìm giá trị MAX trong truy vấn con, sau đó sử dụng các kết quả đó để tham gia vào bảng chính của bạn để truy xuất các cột.

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

Cảm ơn bạn. Trong thử nghiệm giải pháp này tôi nhận được kết quả khác nhau. Có lẽ tôi đang gõ một cái gì đó sai, nhưng tôi nhận được chỉ có giá trị với một mục duy nhất tôi nhận được kết quả cho số mục 6789 và không phải là những người khác. Tất nhiên Im không sử dụng tập dữ liệu đơn giản này tôi có trong ví dụ này, vì vậy tôi có thể mất nó trong bản dịch –

+0

@larry: Tôi đã xác nhận rằng truy vấn tôi đã viết trả lại kết quả mong đợi cho tập dữ liệu mẫu mà bạn đã cung cấp. –

+0

Cảm ơn tôi sẽ tiếp tục tinh chỉnh và cho bạn biết kết quả. Cảm ơn đã đưa tôi đến bước tiếp theo. –

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

Hãy thử

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

Không. Bạn đang chọn 'max (orderfileid)' cho toàn bộ bảng, chứ không phải trên mỗi cơ sở ItemNumber. –

+0

Ồ đúng rồi, giờ tôi hiểu rồi, tôi hoàn toàn hiểu nhầm câu hỏi đó! –

-2

Tôi nghĩ rằng những gì bạn đang tìm kiếm là "Có" khoản. Hãy xem this.

chọn orderfileid, max (itemnumber), itemcost, kho từ nhóm MyTable theo orderfileid có tối đa (itemnumber);

+0

Có là một đánh giá sau quá trình và hầu như luôn luôn là phụ tối ưu. – Konchog

0

bạn có thể tham khảo một vấn đề tương tự về cách nhóm thứ sử dụng phân vùng và chọn một trong mỗi phân vùng trong mysql

Deleting Rows: No Single Member Has More Than x Records

đây là một cái gì đó tương tự như làm bậc trên trong Oracle. bài viết trước của tôi là cho oracle. xấu của tôi ..

+0

MySQL không có chức năng cửa sổ. –

0

Tôi thậm chí sẽ không sử dụng Max. Chỉ cần kết hợp GROUP BY và ORDER BY

SELECT * FROM orders GROUP BY item_number ORDER BY orderfileid DESC 

sau đó cho tối thiểu chỉ cần thay đổi để ASC

+1

Không vì OP chỉ muốn 1 trong mỗi mục, không phải tất cả các trường hợp của mặt hàng được đơn hàng đặt hàng. LƯU Ý: Tôi đang biện minh cho Necro, bởi vì câu trả lời là một Necro –

Các vấn đề liên quan