web-dev-qa-db-fra.com

SQL Sélection de plusieurs colonnes en fonction de la valeur maximale dans une colonne

OK, alors j’ai jeté un coup d’œil aux autres solutions et aucune aide. Voici donc ce que j'essaie de faire. Je dois sélectionner la ligne à plusieurs colonnes où la valeur d'une colonne est la valeur maximale.

voici des exemples de données

    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

Je dois sélectionner la ligne entière où orderfileid est le maximum pour chaque numéro d'article unique.

l'ensemble de données retourné devrait ressembler à

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

Je pense avoir essayé toutes les combinaisons de select max (orderfileid) auquel je peux penser

Toute aide serait appréciée. Merci

14
larry hartman

Vous devez rechercher vos valeurs MAX dans une sous-requête, puis utiliser ces résultats pour rejoindre la table principale afin de récupérer les colonnes.

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
15
Joe Stefanelli
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
3
Derek Kromm

Je n'utiliserais même pas Max. Il suffit de combiner GROUP BY et ORDER BY

SELECT * FROM orders GROUP BY item_number ORDER BY orderfileid DESC

alors pour minimum changer juste à ASC

1
user2593417

Essayer

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

vous pouvez vous référer à un problème similaire sur la façon de regrouper des éléments en utilisant le partitionnement et en en choisissant un par partition dans mysql

Suppression de lignes: aucun membre n'a plus de x enregistrements

c'est quelque chose de similaire à faire le classement dans Oracle. mon précédent post était pour Oracle. ma faute..

0
user747858