recente - sql where max




SQL sélectionnant les lignes par date la plus récente (4)

En utilisant la requête et les résultats suivants, je cherche l'entrée la plus récente où ChargeId et ChargeType sont uniques.

select chargeId, chargeType, serviceMonth from invoice

    CHARGEID    CHARGETYPE  SERVICEMONTH
1   101     R       8/1/2008
2   161     N       2/1/2008
3   101     R       2/1/2008
4   101     R       3/1/2008
5   101     R       4/1/2008
6   101     R       5/1/2008
7   101     R       6/1/2008
8   101     R       7/1/2008

Voulu:

    CHARGEID    CHARGETYPE  SERVICEMONTH
1   101     R       8/1/2008
2   161     N       2/1/2008

Donc, ce n'est pas ce que le demandeur demandait mais c'est la réponse à "SQL sélection des lignes par date la plus récente".

Modifié à partir de http://wiki.lessthandot.com/index.php/Returning_The_Maximum_Value_For_A_Row

SELECT t.chargeId, t.chargeType, t.serviceMonth FROM( 
    SELECT chargeId,MAX(serviceMonth) AS serviceMonth
    FROM invoice
    GROUP BY chargeId) x 
    JOIN invoice t ON x.chargeId =t.chargeId
    AND x.serviceMonth = t.serviceMonth

Je vois que la plupart des développeurs utilisent des requêtes en ligne sans se soucier de l'impact sur les données volumineuses.

en simple, vous pouvez y parvenir en:

select a.chargeId, a.chargeType, a.serviceMonth 
from invoice a
left outer join invoice b
on a.chargeId=b.chargeId and a.serviceMonth <b.serviceMonth 
where b.chargeId is null
order by a.serviceMonth desc

SELECT chargeId, chargeType, MAX(serviceMonth) AS serviceMonth 
FROM invoice
GROUP BY chargeId, chargeType

select to.chargeid,t0.po,i.chargetype from invoice i
inner join
(select chargeid,max(servicemonth)po from invoice 
group by chargeid)t0
on i.chargeid=t0.chargeid

La requête ci-dessus fonctionnera si l'identifiant de charge distinct a différentes combinaisons de types de caractères. Espérons que cette requête simple aide avec peu de temps de performance en considération ...





oracle