SQL Выбор нескольких столбцов на основе максимального значения в одном столбце - PullRequest
14 голосов
/ 28 июля 2011

ОК, так что я посмотрел, но другие решения не помогли.Вот что я пытаюсь сделать.Мне нужно выбрать строку с несколькими столбцами, где значение в одном столбце является максимальным значением.

вот пример данных

    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 ]

15 голосов
/ 28 июля 2011

Вам необходимо найти значения 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
3 голосов
/ 28 июля 2011
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
1 голос
/ 18 июля 2013

Я бы даже не использовал Макс. Просто объедините GROUP BY и ORDER BY

SELECT * FROM orders GROUP BY item_number ORDER BY orderfileid DESC

тогда для минимума просто измените на ASC

0 голосов
/ 28 июля 2011

вы можете обратиться к аналогичной проблеме о том, как группировать вещи, используя разбиение и выбирая один на раздел в mysql

Удаление строк: ни один участник не имеет больше чем x записей

это похоже на ранжирование в Oracle. мой предыдущий пост был для оракула. мой плохой ..

0 голосов
/ 28 июля 2011

Я думаю, что вы ищете, это предложение "Имея".Взгляните на this .

выберите orderfileid, max (itemnumber), itemcost, склад из группы MyTable по orderfileid, имеющему max (itemnumber);

0 голосов
/ 28 июля 2011

Попробуйте

SELECT * FROM `TABLE` WHERE orderfileid=(select max(orderfileid) from TABLE)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...