109 votes

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

En utilisant la requête et les 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
 

154voto

Mitchel Sellers Points 38352

Vous pouvez utiliser GROUP BY pour regrouper des éléments par type et par 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
 

62voto

tvanfosson Points 268301

Donc, ce n’est pas ce que le demandeur demandait mais c’est la réponse à "SQL sélectionnant les lignes par la 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
 

12voto

Ben Hoffstein Points 44398
SELECT chargeId, chargeType, MAX(serviceMonth) AS serviceMonth 
FROM invoice
GROUP BY chargeId, chargeType

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X