À l'aide de la requête et des résultats suivants, je recherche l'entrée la plus récente pour laquelle 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
Vous pouvez utiliser un GROUP BY pour regrouper les éléments par type et id. Ensuite, vous pouvez utiliser la fonction MAX () Aggregate pour obtenir le mois de service le plus récent. La liste ci-dessous renvoie un ensemble de résultats avec ChargeId, ChargeType et MostRecentServiceMonth
SELECT
CHARGEID,
CHARGETYPE,
MAX(SERVICEMONTH) AS "MostRecentServiceMonth"
FROM INVOICE
GROUP BY CHARGEID, CHARGETYPE
Ce n’est donc pas ce que le demandeur demandait, mais bien la réponse à "Sélection de lignes SQL par date la plus récente".
Modifié 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
SELECT chargeId, chargeType, MAX(serviceMonth) AS serviceMonth
FROM invoice
GROUP BY chargeId, chargeType
Je constate que la plupart des développeurs utilisent une requête en ligne sans se soucier de son impact sur des données volumineuses.
en toute simplicité, 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