2 dates les plus récentes pour chaque ID

Le
daniel
Bonjour,

J'ai une table avec des ID faites à plusieurs date.

Je veux faire une requête pour sortir les 2 date les plus récentes pour
chaque ID.

Merci.
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michel__D
Le #16506831
Bonjour,

daniel a écrit :
Bonjour,

J'ai une table avec des ID faites à plusieurs date.

Je veux faire une requête pour sortir les 2 date les plus récentes pour
chaque ID.



Tu peux créer une requête qui compte les enregistrements par ID avec
la valeur 1 pour la date la plus récente ensuite avec une autre
requête tu sélectionne les enregistrements dont le compte <= 2.

PS:Je donnerai une solution demain, cela te laisse la nuit pour y réfléchir.
Michel__D
Le #16509761
daniel a écrit :
Bonjour,

J'ai une table avec des ID faites à plusieurs date.

Je veux faire une requête pour sortir les 2 date les plus récentes pour
chaque ID.



Dans la mesure au chaque ID posséde plusieurs dates voici une solution
à adapter en 2 requêtes (mode SQL) :

La 1ère requête qui compte nommée [ReqCompte] :

SELECT T1.ID, T1.DateEnr, Count(T2.DateEnr) AS Rang
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
GROUP BY T1.ID, T1.DateEnr;

La 2ème requête qui donne le résultat souhaité :

SELECT T1.ID, T1.DateEnr
FROM ReqCompte
WHERE T1.Rang<=2;


Et voici une autre solution qui est un condensé de la solution précédente :

SELECT T1.ID, T1.DateEnr
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
GROUP BY T1.ID, T1.DateEnr
HAVING Count(T2.DateEnr)<=2;
daniel
Le #16524831
"Michel__D" a écrit :

daniel a écrit :
> Bonjour,
>
> J'ai une table avec des ID faites à plusieurs date.
>
> Je veux faire une requête pour sortir les 2 date les plus récentes pour
> chaque ID.

Dans la mesure au chaque ID posséde plusieurs dates voici une solution
à adapter en 2 requêtes (mode SQL) :

La 1ère requête qui compte nommée [ReqCompte] :

SELECT T1.ID, T1.DateEnr, Count(T2.DateEnr) AS Rang
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
GROUP BY T1.ID, T1.DateEnr;

La 2ème requête qui donne le résultat souhaité :

SELECT T1.ID, T1.DateEnr
FROM ReqCompte
WHERE T1.Rang<=2;


Et voici une autre solution qui est un condensé de la solution précédente :

SELECT T1.ID, T1.DateEnr
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
GROUP BY T1.ID, T1.DateEnr
HAVING Count(T2.DateEnr)<=2;



Merci beaucoup Michel_D

ta solution marche, sauf quand il y a deux dates identique
Thom
Le #16525061
Bonjour,

J'ai une autre solution qui semble fonctionner dans tous les cas et qui peut
facilement être adapté pour retourner x dates :

Bonne journée,

Thomas

SELECT ID, DateEnr
FROM LaTable AS T1
WHERE T1.DateEnr IN ( SELECT TOP 2 DateEnr
FROM LaTable
HAVING ID = T1.ID
GROUP BY ID, DateEnr
ORDER BY DESC);

"daniel"


"Michel__D" a écrit :

daniel a écrit :
> Bonjour,
>
> J'ai une table avec des ID faites à plusieurs date.
>
> Je veux faire une requête pour sortir les 2 date les plus récentes pour
> chaque ID.

Dans la mesure au chaque ID posséde plusieurs dates voici une solution
à adapter en 2 requêtes (mode SQL) :

La 1ère requête qui compte nommée [ReqCompte] :

SELECT T1.ID, T1.DateEnr, Count(T2.DateEnr) AS Rang
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
GROUP BY T1.ID, T1.DateEnr;

La 2ème requête qui donne le résultat souhaité :

SELECT T1.ID, T1.DateEnr
FROM ReqCompte
WHERE T1.Rang<=2;


Et voici une autre solution qui est un condensé de la solution précédente
:

SELECT T1.ID, T1.DateEnr
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
GROUP BY T1.ID, T1.DateEnr
HAVING Count(T2.DateEnr)<=2;



Merci beaucoup Michel_D

ta solution marche, sauf quand il y a deux dates identique



daniel
Le #16525151
Effectivement ça fonctionne mieux.
Merci Thom.
Daniel.

"Thom" a écrit :

Bonjour,

J'ai une autre solution qui semble fonctionner dans tous les cas et qui peut
facilement être adapté pour retourner x dates :

Bonne journée,

Thomas

SELECT ID, DateEnr
FROM LaTable AS T1
WHERE T1.DateEnr IN ( SELECT TOP 2 DateEnr
FROM LaTable
HAVING ID = T1.ID
GROUP BY ID, DateEnr
ORDER BY DESC);

"daniel"
>
>
> "Michel__D" a écrit :
>
>> daniel a écrit :
>> > Bonjour,
>> >
>> > J'ai une table avec des ID faites à plusieurs date.
>> >
>> > Je veux faire une requête pour sortir les 2 date les plus récentes pour
>> > chaque ID.
>>
>> Dans la mesure au chaque ID posséde plusieurs dates voici une solution
>> à adapter en 2 requêtes (mode SQL) :
>>
>> La 1ère requête qui compte nommée [ReqCompte] :
>>
>> SELECT T1.ID, T1.DateEnr, Count(T2.DateEnr) AS Rang
>> FROM LaTable AS T1 INNER JOIN LaTable AS T2
>> ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
>> GROUP BY T1.ID, T1.DateEnr;
>>
>> La 2ème requête qui donne le résultat souhaité :
>>
>> SELECT T1.ID, T1.DateEnr
>> FROM ReqCompte
>> WHERE T1.Rang<=2;
>>
>>
>> Et voici une autre solution qui est un condensé de la solution précédente
>> :
>>
>> SELECT T1.ID, T1.DateEnr
>> FROM LaTable AS T1 INNER JOIN LaTable AS T2
>> ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
>> GROUP BY T1.ID, T1.DateEnr
>> HAVING Count(T2.DateEnr)<=2;
>>
> Merci beaucoup Michel_D
>
> ta solution marche, sauf quand il y a deux dates identique
>





Michel__D
Le #16528911
Bonjour,

"daniel"


"Michel__D" a écrit :

> daniel a écrit :
> > Bonjour,
> >
> > J'ai une table avec des ID faites à plusieurs date.
> >
> > Je veux faire une requête pour sortir les 2 date les plus récentes pour
> > chaque ID.
>
> Dans la mesure au chaque ID posséde plusieurs dates voici une solution
> à adapter en 2 requêtes (mode SQL) :
>
> La 1ère requête qui compte nommée [ReqCompte] :
>
> SELECT T1.ID, T1.DateEnr, Count(T2.DateEnr) AS Rang
> FROM LaTable AS T1 INNER JOIN LaTable AS T2
> ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
> GROUP BY T1.ID, T1.DateEnr;
>
> La 2ème requête qui donne le résultat souhaité :
>
> SELECT T1.ID, T1.DateEnr
> FROM ReqCompte
> WHERE T1.Rang<=2;
>
>
> Et voici une autre solution qui est un condensé de la solution précédente :
>
> SELECT T1.ID, T1.DateEnr
> FROM LaTable AS T1 INNER JOIN LaTable AS T2
> ON (T1.ID=T2.ID And T1.DateEnr<=T2.DateEnr)
> GROUP BY T1.ID, T1.DateEnr
> HAVING Count(T2.DateEnr)<=2;
>
Merci beaucoup Michel_D

ta solution marche, sauf quand il y a deux dates identique



Dans ce cas essaye ceci :

SELECT T1.ID, T1.DateEnr
FROM LaTable AS T1
WHERE T1.DateEnr In
(SELECT TOP 2 DateEnr
FROM LaTable
WHERE ID=T1.ID
ORDER BY DateEnr DESC);
Publicité
Poster une réponse
Anonyme