Requête de regroupement

Le
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
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
Jac
Le #16493281
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


dakota78
Le #16493671
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





Michel__D
Le #16494641
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;
Richard_35
Le #16494631
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
>
>
>


Jac
Le #16495421
... 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









Michel__D
Le #16495731
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.
dakota78
Le #16521231
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;



Publicité
Poster une réponse
Anonyme