Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

2 dates les plus récentes pour chaque ID

6 réponses
Avatar
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.

6 réponses

Avatar
Michel__D
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.
Avatar
Michel__D
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;
Avatar
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
Avatar
Thom
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" a écrit dans le message de news:



"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



Avatar
daniel
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" a écrit dans le message de news:

>
>
> "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
>





Avatar
Michel__D
Bonjour,

"daniel" a écrit dans le message de news:


"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);