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

Requête de regroupement

7 réponses
Avatar
dakota78
Bonjour,
Dans une table j'ai les données suivantes qui représentent l'heure de début
et de fin d'activité d'employés.
Mes objectifs sont :
1) de sélectionner le pointage le plus récent.
2) déterminer si à ce dernier pointage l'employé a débuté ou terminé le
travail.

FURIO;6/8/08 07:32:02;D
JACQUES;6/8/08 07:56:54;D
FURIO;6/8/08 12:34:18;F
JACQUES;6/8/08 12:34:50;F
JACQUES;6/8/08 13:04:00;D

Dans ce cas la reqûete devrait sortir les enregistrements suivants :
FURIO;6/8/08 12:34:18;F
JACQUES;6/8/08 13:04:00;D
(Donc Furio a pointé sortie tandis que Jacques a pointé début d'activité.)

Si je fais une requête de regroupement sur le nom et l'heure pour avoir
l'enregistrement le plus récent pour chaque personne :
SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE FROM RQ03 GROUP BY
RQ03.NOM;
J'obtiens :
FURIO;6/8/08 12:34:18
JACQUES;6/8/08 13:04:00
Mais j'ai perdu le champ qui détermine si c'est un début ou une fin
d'activité : D ou F

Comment faire une reqûete de regroupement sur nom et heure mais qui affiche
aussi les autres champs de la table ?
D'avance merci pour votre temps.
Mario

7 réponses

Avatar
Jac
Bonjour Dakota,

est-ce qu'avec quelque chose qui ressemblerait à ceci

SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE, RQ03.STATUS FROM
RQ03 GROUP BY RQ03.NOM;

ça irait ? Status pouvant être le nom du champs avec les "D" et les
"F".

Bonjour,
Dans une table j'ai les données suivantes qui représentent l'heure de début
et de fin d'activité d'employés.
Mes objectifs sont :
1) de sélectionner le pointage le plus récent.
2) déterminer si à ce dernier pointage l'employé a débuté ou terminé le
travail.

FURIO;6/8/08 07:32:02;D
JACQUES;6/8/08 07:56:54;D
FURIO;6/8/08 12:34:18;F
JACQUES;6/8/08 12:34:50;F
JACQUES;6/8/08 13:04:00;D

Dans ce cas la reqûete devrait sortir les enregistrements suivants :
FURIO;6/8/08 12:34:18;F
JACQUES;6/8/08 13:04:00;D
(Donc Furio a pointé sortie tandis que Jacques a pointé début d'activité.)

Si je fais une requête de regroupement sur le nom et l'heure pour avoir
l'enregistrement le plus récent pour chaque personne :
SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE FROM RQ03 GROUP BY
RQ03.NOM;
J'obtiens :
FURIO;6/8/08 12:34:18
JACQUES;6/8/08 13:04:00
Mais j'ai perdu le champ qui détermine si c'est un début ou une fin
d'activité : D ou F

Comment faire une reqûete de regroupement sur nom et heure mais qui affiche
aussi les autres champs de la table ?
D'avance merci pour votre temps.
Mario


Avatar
dakota78
Bonjour, Merci pour ton aide.
Avec ce code j'obtiens le message d'erreur :
"You tried to execute a query that doesn't include the specified expression
'STATUS' as part of an aggregate function."

Dès qu'on met un champ en plus, il en tient compte pour le regroupement.
Encore merci.


"Jac" a écrit :

Bonjour Dakota,

est-ce qu'avec quelque chose qui ressemblerait à ceci

SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE, RQ03.STATUS FROM
RQ03 GROUP BY RQ03.NOM;

ça irait ? Status pouvant être le nom du champs avec les "D" et les
"F".

> Bonjour,
> Dans une table j'ai les données suivantes qui représentent l'heure de début
> et de fin d'activité d'employés.
> Mes objectifs sont :
> 1) de sélectionner le pointage le plus récent.
> 2) déterminer si à ce dernier pointage l'employé a débuté ou terminé le
> travail.
>
> FURIO;6/8/08 07:32:02;D
> JACQUES;6/8/08 07:56:54;D
> FURIO;6/8/08 12:34:18;F
> JACQUES;6/8/08 12:34:50;F
> JACQUES;6/8/08 13:04:00;D
>
> Dans ce cas la reqûete devrait sortir les enregistrements suivants :
> FURIO;6/8/08 12:34:18;F
> JACQUES;6/8/08 13:04:00;D
> (Donc Furio a pointé sortie tandis que Jacques a pointé début d'activité.)
>
> Si je fais une requête de regroupement sur le nom et l'heure pour avoir
> l'enregistrement le plus récent pour chaque personne :
> SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE FROM RQ03 GROUP BY
> RQ03.NOM;
> J'obtiens :
> FURIO;6/8/08 12:34:18
> JACQUES;6/8/08 13:04:00
> Mais j'ai perdu le champ qui détermine si c'est un début ou une fin
> d'activité : D ou F
>
> Comment faire une reqûete de regroupement sur nom et heure mais qui affiche
> aussi les autres champs de la table ?
> D'avance merci pour votre temps.
> Mario





Avatar
Michel__D
Bonjour,

dakota78 a écrit :
Bonjour,
Dans une table j'ai les données suivantes qui représentent l'heure de début
et de fin d'activité d'employés.
Mes objectifs sont :
1) de sélectionner le pointage le plus récent.
2) déterminer si à ce dernier pointage l'employé a débuté ou terminé le
travail.

FURIO;6/8/08 07:32:02;D
JACQUES;6/8/08 07:56:54;D
FURIO;6/8/08 12:34:18;F
JACQUES;6/8/08 12:34:50;F
JACQUES;6/8/08 13:04:00;D

Dans ce cas la reqûete devrait sortir les enregistrements suivants :
FURIO;6/8/08 12:34:18;F
JACQUES;6/8/08 13:04:00;D
(Donc Furio a pointé sortie tandis que Jacques a pointé début d'activité.)

Si je fais une requête de regroupement sur le nom et l'heure pour avoir
l'enregistrement le plus récent pour chaque personne :
SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE FROM RQ03 GROUP BY
RQ03.NOM;
J'obtiens :
FURIO;6/8/08 12:34:18
JACQUES;6/8/08 13:04:00
Mais j'ai perdu le champ qui détermine si c'est un début ou une fin
d'activité : D ou F

Comment faire une reqûete de regroupement sur nom et heure mais qui affiche
aussi les autres champs de la table ?
D'avance merci pour votre temps.



Pour récupérer l'info manquante il faut réutiliser ta requête en relation
avec la source qui contient l'info manquante :

Ta 1ère requête nommée "Requete1" :

SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE
FROM RQ03
GROUP BY RQ03.NOM;

Et la requête qui te fournit les infos manquantes :

SELECT R.NOM, R.DernierDeHEURE, T.TonChamp
FROM RQ03 AS T INNER JOIN Requete1 AS R
ON T.NOM=R.NOM And T.HEURE=R.DernierDeHEURE;
Avatar
Richard_35
Bonjour dakota78,

Il faut agir en 2 temps, car un champ ne peut être, à la fois, dans les
champs de regroupement, et comme attribut des enregistrements regroupés (je
ne sais pas si je suis clair).

Ta requête (R1) est bonne, pour le premier temps :
SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE FROM RQ03 [from RQ03]
GROUP BY RQ03.NOM;

Il faut en créer une deuxième qui aura, en primaire, R1 liée à RQ03 qui te
donnera l'attribut de l'enregistrement regroupé (D ou F). Il faut,
absolument, faire la liaison avec l'identifiant unique de RQ03.

Dis-nous,
Richard.

"dakota78" a écrit :

Bonjour, Merci pour ton aide.
Avec ce code j'obtiens le message d'erreur :
"You tried to execute a query that doesn't include the specified expression
'STATUS' as part of an aggregate function."

Dès qu'on met un champ en plus, il en tient compte pour le regroupement.
Encore merci.


"Jac" a écrit :

> Bonjour Dakota,
>
> est-ce qu'avec quelque chose qui ressemblerait à ceci
>
> SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE, RQ03.STATUS FROM
> RQ03 GROUP BY RQ03.NOM;
>
> ça irait ? Status pouvant être le nom du champs avec les "D" et les
> "F".
>
> > Bonjour,
> > Dans une table j'ai les données suivantes qui représentent l'heure de début
> > et de fin d'activité d'employés.
> > Mes objectifs sont :
> > 1) de sélectionner le pointage le plus récent.
> > 2) déterminer si à ce dernier pointage l'employé a débuté ou terminé le
> > travail.
> >
> > FURIO;6/8/08 07:32:02;D
> > JACQUES;6/8/08 07:56:54;D
> > FURIO;6/8/08 12:34:18;F
> > JACQUES;6/8/08 12:34:50;F
> > JACQUES;6/8/08 13:04:00;D
> >
> > Dans ce cas la reqûete devrait sortir les enregistrements suivants :
> > FURIO;6/8/08 12:34:18;F
> > JACQUES;6/8/08 13:04:00;D
> > (Donc Furio a pointé sortie tandis que Jacques a pointé début d'activité.)
> >
> > Si je fais une requête de regroupement sur le nom et l'heure pour avoir
> > l'enregistrement le plus récent pour chaque personne :
> > SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE FROM RQ03 GROUP BY
> > RQ03.NOM;
> > J'obtiens :
> > FURIO;6/8/08 12:34:18
> > JACQUES;6/8/08 13:04:00
> > Mais j'ai perdu le champ qui détermine si c'est un début ou une fin
> > d'activité : D ou F
> >
> > Comment faire une reqûete de regroupement sur nom et heure mais qui affiche
> > aussi les autres champs de la table ?
> > D'avance merci pour votre temps.
> > Mario
>
>
>


Avatar
Jac
... oui, mais... si tu remplaces RQ03.STATUS par
Min(RQ03.STATUS) AS RQ03.STATUS
ça devrait fonctionner, car comme il n'y a qu'une seule valeur, min ou
max renvoie cette valeur, sans équivoque...

Bonjour, Merci pour ton aide.
Avec ce code j'obtiens le message d'erreur :
"You tried to execute a query that doesn't include the specified expression
'STATUS' as part of an aggregate function."

Dès qu'on met un champ en plus, il en tient compte pour le regroupement.
Encore merci.


"Jac" a écrit :

Bonjour Dakota,

est-ce qu'avec quelque chose qui ressemblerait à ceci

SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE, RQ03.STATUS FROM
RQ03 GROUP BY RQ03.NOM;

ça irait ? Status pouvant être le nom du champs avec les "D" et les
"F".

Bonjour,
Dans une table j'ai les données suivantes qui représentent l'heure de début
et de fin d'activité d'employés.
Mes objectifs sont :
1) de sélectionner le pointage le plus récent.
2) déterminer si à ce dernier pointage l'employé a débuté ou terminé le
travail.

FURIO;6/8/08 07:32:02;D
JACQUES;6/8/08 07:56:54;D
FURIO;6/8/08 12:34:18;F
JACQUES;6/8/08 12:34:50;F
JACQUES;6/8/08 13:04:00;D

Dans ce cas la reqûete devrait sortir les enregistrements suivants :
FURIO;6/8/08 12:34:18;F
JACQUES;6/8/08 13:04:00;D
(Donc Furio a pointé sortie tandis que Jacques a pointé début d'activité.)

Si je fais une requête de regroupement sur le nom et l'heure pour avoir
l'enregistrement le plus récent pour chaque personne :
SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE FROM RQ03 GROUP BY
RQ03.NOM;
J'obtiens :
FURIO;6/8/08 12:34:18
JACQUES;6/8/08 13:04:00
Mais j'ai perdu le champ qui détermine si c'est un début ou une fin
d'activité : D ou F

Comment faire une reqûete de regroupement sur nom et heure mais qui affiche
aussi les autres champs de la table ?
D'avance merci pour votre temps.
Mario









Avatar
Michel__D
Bonjour,

Jac a écrit :
.... oui, mais... si tu remplaces RQ03.STATUS par
Min(RQ03.STATUS) AS RQ03.STATUS
ça devrait fonctionner, car comme il n'y a qu'une seule valeur, min ou
max renvoie cette valeur, sans équivoque...



Non cela va toujours renvoyer soit la plus petite valeur donc "D" avec min
ou soit la plus grande valeur donc "F" avec max.
Avatar
dakota78
Un grand merci pour votre aide.
Cela fonctionne parfaitement.


"Michel__D" a écrit :

Bonjour,

dakota78 a écrit :
> Bonjour,
> Dans une table j'ai les données suivantes qui représentent l'heure de début
> et de fin d'activité d'employés.
> Mes objectifs sont :
> 1) de sélectionner le pointage le plus récent.
> 2) déterminer si à ce dernier pointage l'employé a débuté ou terminé le
> travail.
>
> FURIO;6/8/08 07:32:02;D
> JACQUES;6/8/08 07:56:54;D
> FURIO;6/8/08 12:34:18;F
> JACQUES;6/8/08 12:34:50;F
> JACQUES;6/8/08 13:04:00;D
>
> Dans ce cas la reqûete devrait sortir les enregistrements suivants :
> FURIO;6/8/08 12:34:18;F
> JACQUES;6/8/08 13:04:00;D
> (Donc Furio a pointé sortie tandis que Jacques a pointé début d'activité.)
>
> Si je fais une requête de regroupement sur le nom et l'heure pour avoir
> l'enregistrement le plus récent pour chaque personne :
> SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE FROM RQ03 GROUP BY
> RQ03.NOM;
> J'obtiens :
> FURIO;6/8/08 12:34:18
> JACQUES;6/8/08 13:04:00
> Mais j'ai perdu le champ qui détermine si c'est un début ou une fin
> d'activité : D ou F
>
> Comment faire une reqûete de regroupement sur nom et heure mais qui affiche
> aussi les autres champs de la table ?
> D'avance merci pour votre temps.

Pour récupérer l'info manquante il faut réutiliser ta requête en relation
avec la source qui contient l'info manquante :

Ta 1ère requête nommée "Requete1" :

SELECT RQ03.NOM, Last(RQ03.HEURE) AS DernierDeHEURE
FROM RQ03
GROUP BY RQ03.NOM;

Et la requête qui te fournit les infos manquantes :

SELECT R.NOM, R.DernierDeHEURE, T.TonChamp
FROM RQ03 AS T INNER JOIN Requete1 AS R
ON T.NOM=R.NOM And T.HEURE=R.DernierDeHEURE;