2
votes

Comment sélectionner plusieurs colonnes avec un groupe par une colonne

J'ai ..

select max(Date),ID,Qty from table group by ID,Qty  

J'ai besoin des données d'ID et de quantité au maximum (date) de chaque ID comme ci-dessous

Date         ID   Qty  
2019/6/1     A    22
2019/7/1     B    33

J'utilise ..

Date         ID   Qty  
2019/5/1     A    11  
2019/6/1     A    22 
2019/7/1     B    33  
2019/6/1     B    44  

mais le résultat n'est pas ce que j'attends


0 commentaires

4 Réponses :


2
votes

group by n'est probablement pas le bon outil pour le travail. À la place, vous pouvez utiliser rank pour trouver la première ligne par groupe et filtrer en fonction de celle-ci:

SELECT date, id, qty
FROM   (SELECT date, id, qty, RANK() OVER (PARTITION BY id ORDER BY date DESC) AS rk
        FROM   mytable) t
WHERE  rk = 1


2 commentaires

Merci beaucoup. c'est du travail mais je ne comprends pas le code


ceci est expliqué dans un blog ici: coding.feron.it/2012/08/…



3
votes

Vous pouvez utiliser la solution suivante:

SELECT t.* 
FROM table_name t INNER JOIN (
    SELECT MAX(Date) AS Date, ID 
    FROM table_name
    GROUP BY ID
) tMAX ON t.ID = tMAX.ID AND t.Date = tMAX.Date

démo sur dbfiddle.uk


0 commentaires

1
votes

Essayez ceci

SELECT Date,
       ID,
       Qty 
FROM
(
SELECT Date,
       ROW_NUMBER()OVER(PARTITION BY ID ORDER BY Date DESC) AS Grp,
       ID,
       Qty 
FROM <Table>
)Dt
WHERE Dt.Grp = 1


0 commentaires

1
votes

vous pouvez utiliser la sous-requête corrélée

select t1.* from table_name t1
where date=( select max(date) from table_name t2 where t2.id=t1.id)


0 commentaires