web-dev-qa-db-fra.com

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

À 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
94
jgreep

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
137
Mitchel Sellers

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
49
tvanfosson
SELECT chargeId, chargeType, MAX(serviceMonth) AS serviceMonth 
FROM invoice
GROUP BY chargeId, chargeType
8
Ben Hoffstein

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
3
sujeet