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

Sous totaux chronologiques

15 réponses
Avatar
Didou
Bonjour,
Je fais le suivi de l'activité de machines (toutes les secondes) qui ont
différents états de fonctionnement dans le temps (1, 2 ou 3). Je voudrais
dans une requête reconstituer la chronologie des différents états de
fonctionnement (exemple Enregistrement 1 9h00 – 9h03 – Etat 1 ;
Enregistrement 2 9h04 – 9 h07 Etat 2 ; Enregistrement 3 9h08 – 9 h11 Etat 1).

Le problème est que ma requête globalise les deux états 1, je ne sais pas
comment séparer ces deux périodes de fonctionnement.

Merci d'avance

10 réponses

1 2
Avatar
Jac
Bonjour Didou,

peux-tu nous montrer une dizaine de lignes de table ?

Car entre ce que tu as, que je ne vois pas, et ce que tu veux et que je
ne vois peu, j'ai un peu de mal à te suivre...

Jac

Bonjour,

Pour réaliser ce calcul, j'ai dans ma base un champ avec la date et l'heure
et un autre avec le niveau de l'état. La requête réalisée jusqu'à maintenant
me donne le résultat suivant : Enregistrement 1 9h00 – 9h11 – Etat 1
;Enregistrement 2 9h04 – 9 h07 Etat 2.

Merci de votre aide et n'hésitez pas à poser d'autres questions si besoin

"Michel_D" a écrit :

Bonjour,

"Didou" a écrit dans le message de
news:
Bonjour,
Je fais le suivi de l'activité de machines (toutes les secondes) qui ont
différents états de fonctionnement dans le temps (1, 2 ou 3). Je voudrais
dans une requête reconstituer la chronologie des différents états de
fonctionnement (exemple Enregistrement 1 9h00 – 9h03 – Etat 1 ;
Enregistrement 2 9h04 – 9 h07 Etat 2 ; Enregistrement 3 9h08 – 9 h11 Etat
1).

Le problème est que ma requête globalise les deux états 1, je ne sais pas
comment séparer ces deux périodes de fonctionnement.



Sans la date je vois pas comment tu va y arriver ???






Avatar
Didou
Bonjour Jac (et à toute la communauté)

Suite à ta demande voici un exemple (concentré !) de données.
ID_Donnée ID_Machine Heure Etat
1 4849 16:55:43 1
2 4849 16:55:44 1
3 4849 16:55:45 1
4 4849 16:55:46 1
5 4849 16:55:47 2
6 4849 16:55:48 2
7 4849 16:55:49 2
8 4849 16:56:50 1
9 4849 16:56:51 1
10 4849 16:56:52 1

Quand je fais une requête de regroupement concernant les temps dans les
différents états, j'obtiens deux lignes :
- 1 pour l'état 2, cela dure 3 secondes, débute à 47 s et finit à 49s, c'est
ce que je souhaite.
- 1 pour l'état 1, cela dure 7 secondes, commence à 43 et finit à 52. Ce que
je souhaiterais pour l'état 1, ce serait deux lignes, une qui commence à 43
et finit à 46 et une autre qui commence à 50 et finit à 52.

Me suis-je bien fait comprendre ?

Grand merci en tous cas pour votre aide

Didou

"Jac" a écrit :

Bonjour Didou,

peux-tu nous montrer une dizaine de lignes de table ?

Car entre ce que tu as, que je ne vois pas, et ce que tu veux et que je
ne vois peu, j'ai un peu de mal à te suivre...

Jac

> Bonjour,
>
> Pour réaliser ce calcul, j'ai dans ma base un champ avec la date et l'heure
> et un autre avec le niveau de l'état. La requête réalisée jusqu'à maintenant
> me donne le résultat suivant : Enregistrement 1 9h00 – 9h11 – Etat 1
> ;Enregistrement 2 9h04 – 9 h07 Etat 2.
>
> Merci de votre aide et n'hésitez pas à poser d'autres questions si besoin
>
> "Michel_D" a écrit :
>
>> Bonjour,
>>
>> "Didou" a écrit dans le message de
>> news:
>>> Bonjour,
>>> Je fais le suivi de l'activité de machines (toutes les secondes) qui ont
>>> différents états de fonctionnement dans le temps (1, 2 ou 3). Je voudrais
>>> dans une requête reconstituer la chronologie des différents états de
>>> fonctionnement (exemple Enregistrement 1 9h00 – 9h03 – Etat 1 ;
>>> Enregistrement 2 9h04 – 9 h07 Etat 2 ; Enregistrement 3 9h08 – 9 h11 Etat
>>> 1).
>>>
>>> Le problème est que ma requête globalise les deux états 1, je ne sais pas
>>> comment séparer ces deux périodes de fonctionnement.
>>
>> Sans la date je vois pas comment tu va y arriver ???
>>
>>





Avatar
Jac
... comment reçois-tu les données originales : *.txt, *.xls, *.csv ?
Et comment les réintègres-tu dans Access : import, attachement, puis
requête ajout ou ... ?



Bonjour Jac (et à toute la communauté)

Suite à ta demande voici un exemple (concentré !) de données.
ID_Donnée ID_Machine Heure Etat
1 4849 16:55:43 1
2 4849 16:55:44 1
3 4849 16:55:45 1
4 4849 16:55:46 1
5 4849 16:55:47 2
6 4849 16:55:48 2
7 4849 16:55:49 2
8 4849 16:56:50 1
9 4849 16:56:51 1
10 4849 16:56:52 1

Quand je fais une requête de regroupement concernant les temps dans les
différents états, j'obtiens deux lignes :
- 1 pour l'état 2, cela dure 3 secondes, débute à 47 s et finit à 49s, c'est
ce que je souhaite.
- 1 pour l'état 1, cela dure 7 secondes, commence à 43 et finit à 52. Ce que
je souhaiterais pour l'état 1, ce serait deux lignes, une qui commence à 43
et finit à 46 et une autre qui commence à 50 et finit à 52.

Me suis-je bien fait comprendre ?

Grand merci en tous cas pour votre aide

Didou

"Jac" a écrit :

Bonjour Didou,

peux-tu nous montrer une dizaine de lignes de table ?

Car entre ce que tu as, que je ne vois pas, et ce que tu veux et que je
ne vois peu, j'ai un peu de mal à te suivre...

Jac

Bonjour,

Pour réaliser ce calcul, j'ai dans ma base un champ avec la date et l'heure
et un autre avec le niveau de l'état. La requête réalisée jusqu'à
maintenant me donne le résultat suivant : Enregistrement 1 9h00 – 9h11 –
Etat 1 ;Enregistrement 2 9h04 – 9 h07 Etat 2.

Merci de votre aide et n'hésitez pas à poser d'autres questions si besoin

"Michel_D" a écrit :

Bonjour,

"Didou" a écrit dans le message de
news:
Bonjour,
Je fais le suivi de l'activité de machines (toutes les secondes) qui ont
différents états de fonctionnement dans le temps (1, 2 ou 3). Je voudrais
dans une requête reconstituer la chronologie des différents états de
fonctionnement (exemple Enregistrement 1 9h00 – 9h03 – Etat 1 ;
Enregistrement 2 9h04 – 9 h07 Etat 2 ; Enregistrement 3 9h08 – 9 h11 Etat
1).

Le problème est que ma requête globalise les deux états 1, je ne sais pas
comment séparer ces deux périodes de fonctionnement.



Sans la date je vois pas comment tu va y arriver ???













Avatar
Didou
Bonjour,

Je récupère sur les machines des fichiers enregistrés au format txt et un
développeur m'a fait un programme d' intégration dans la table de la base (ce
que je montre est une petite partie de la table concernée mais représente
bien le problème que je rencontre).

Merci d'avance

"Jac" a écrit :

.... comment reçois-tu les données originales : *.txt, *.xls, *.csv ?
Et comment les réintègres-tu dans Access : import, attachement, puis
requête ajout ou ... ?



> Bonjour Jac (et à toute la communauté)
>
> Suite à ta demande voici un exemple (concentré !) de données.
> ID_Donnée ID_Machine Heure Etat
> 1 4849 16:55:43 1
> 2 4849 16:55:44 1
> 3 4849 16:55:45 1
> 4 4849 16:55:46 1
> 5 4849 16:55:47 2
> 6 4849 16:55:48 2
> 7 4849 16:55:49 2
> 8 4849 16:56:50 1
> 9 4849 16:56:51 1
> 10 4849 16:56:52 1
>
> Quand je fais une requête de regroupement concernant les temps dans les
> différents états, j'obtiens deux lignes :
> - 1 pour l'état 2, cela dure 3 secondes, débute à 47 s et finit à 49s, c'est
> ce que je souhaite.
> - 1 pour l'état 1, cela dure 7 secondes, commence à 43 et finit à 52. Ce que
> je souhaiterais pour l'état 1, ce serait deux lignes, une qui commence à 43
> et finit à 46 et une autre qui commence à 50 et finit à 52.
>
> Me suis-je bien fait comprendre ?
>
> Grand merci en tous cas pour votre aide
>
> Didou
>
> "Jac" a écrit :
>
>> Bonjour Didou,
>>
>> peux-tu nous montrer une dizaine de lignes de table ?
>>
>> Car entre ce que tu as, que je ne vois pas, et ce que tu veux et que je
>> ne vois peu, j'ai un peu de mal à te suivre...
>>
>> Jac
>>
>>> Bonjour,
>>>
>>> Pour réaliser ce calcul, j'ai dans ma base un champ avec la date et l'heure
>>> et un autre avec le niveau de l'état. La requête réalisée jusqu'à
>>> maintenant me donne le résultat suivant : Enregistrement 1 9h00 – 9h11 –
>>> Etat 1 ;Enregistrement 2 9h04 – 9 h07 Etat 2.
>>>
>>> Merci de votre aide et n'hésitez pas à poser d'autres questions si besoin
>>>
>>> "Michel_D" a écrit :
>>>
>>>> Bonjour,
>>>>
>>>> "Didou" a écrit dans le message de
>>>> news:
>>>>> Bonjour,
>>>>> Je fais le suivi de l'activité de machines (toutes les secondes) qui ont
>>>>> différents états de fonctionnement dans le temps (1, 2 ou 3). Je voudrais
>>>>> dans une requête reconstituer la chronologie des différents états de
>>>>> fonctionnement (exemple Enregistrement 1 9h00 – 9h03 – Etat 1 ;
>>>>> Enregistrement 2 9h04 – 9 h07 Etat 2 ; Enregistrement 3 9h08 – 9 h11 Etat
>>>>> 1).
>>>>>
>>>>> Le problème est que ma requête globalise les deux états 1, je ne sais pas
>>>>> comment séparer ces deux périodes de fonctionnement.
>>>>
>>>> Sans la date je vois pas comment tu va y arriver ???
>>>>
>>>>
>>
>>
>>





Avatar
Jac
... dans une requête avec des cumuls j'arrive à avoir le premier état 1
puis le premier état 2 mais le retour à l'état 1, pas moyen...

J'arrive à imaginer une solution, mais en passant par Excel : fichier
txt ouvert dans Excel, macro, export en txt pour que la procédure txt /
Access ne soit pas à reconsidérer.

Si ça peux te convenir, on en reparle.

Bonjour,

Je récupère sur les machines des fichiers enregistrés au format txt et un
développeur m'a fait un programme d' intégration dans la table de la base (ce
que je montre est une petite partie de la table concernée mais représente
bien le problème que je rencontre).

Merci d'avance

"Jac" a écrit :

.... comment reçois-tu les données originales : *.txt, *.xls, *.csv ?
Et comment les réintègres-tu dans Access : import, attachement, puis
requête ajout ou ... ?



Bonjour Jac (et à toute la communauté)

Suite à ta demande voici un exemple (concentré !) de données.
ID_Donnée ID_Machine Heure Etat
1 4849 16:55:43 1
2 4849 16:55:44 1
3 4849 16:55:45 1
4 4849 16:55:46 1
5 4849 16:55:47 2
6 4849 16:55:48 2
7 4849 16:55:49 2
8 4849 16:56:50 1
9 4849 16:56:51 1
10 4849 16:56:52 1

Quand je fais une requête de regroupement concernant les temps dans les
différents états, j'obtiens deux lignes :
- 1 pour l'état 2, cela dure 3 secondes, débute à 47 s et finit à 49s,
c'est ce que je souhaite.
- 1 pour l'état 1, cela dure 7 secondes, commence à 43 et finit à 52. Ce
que je souhaiterais pour l'état 1, ce serait deux lignes, une qui commence
à 43 et finit à 46 et une autre qui commence à 50 et finit à 52.

Me suis-je bien fait comprendre ?






Avatar
Didou
un travail préalable sur les données avant l'introduction dans la base de
données est peut être la seule solution... je vais voir ça avec mon
développeur.

Merci beaucoup


"Jac" a écrit :

.... dans une requête avec des cumuls j'arrive à avoir le premier état 1
puis le premier état 2 mais le retour à l'état 1, pas moyen...

J'arrive à imaginer une solution, mais en passant par Excel : fichier
txt ouvert dans Excel, macro, export en txt pour que la procédure txt /
Access ne soit pas à reconsidérer.

Si ça peux te convenir, on en reparle.

> Bonjour,
>
> Je récupère sur les machines des fichiers enregistrés au format txt et un
> développeur m'a fait un programme d' intégration dans la table de la base (ce
> que je montre est une petite partie de la table concernée mais représente
> bien le problème que je rencontre).
>
> Merci d'avance
>
> "Jac" a écrit :
>
>> .... comment reçois-tu les données originales : *.txt, *.xls, *.csv ?
>> Et comment les réintègres-tu dans Access : import, attachement, puis
>> requête ajout ou ... ?
>>
>>
>>
>>> Bonjour Jac (et à toute la communauté)
>>>
>>> Suite à ta demande voici un exemple (concentré !) de données.
>>> ID_Donnée ID_Machine Heure Etat
>>> 1 4849 16:55:43 1
>>> 2 4849 16:55:44 1
>>> 3 4849 16:55:45 1
>>> 4 4849 16:55:46 1
>>> 5 4849 16:55:47 2
>>> 6 4849 16:55:48 2
>>> 7 4849 16:55:49 2
>>> 8 4849 16:56:50 1
>>> 9 4849 16:56:51 1
>>> 10 4849 16:56:52 1
>>>
>>> Quand je fais une requête de regroupement concernant les temps dans les
>>> différents états, j'obtiens deux lignes :
>>> - 1 pour l'état 2, cela dure 3 secondes, débute à 47 s et finit à 49s,
>>> c'est ce que je souhaite.
>>> - 1 pour l'état 1, cela dure 7 secondes, commence à 43 et finit à 52. Ce
>>> que je souhaiterais pour l'état 1, ce serait deux lignes, une qui commence
>>> à 43 et finit à 46 et une autre qui commence à 50 et finit à 52.
>>>
>>> Me suis-je bien fait comprendre ?





Avatar
Michel__D
Bonjour,

Didou a écrit :
Bonjour Jac (et à toute la communauté)

Suite à ta demande voici un exemple (concentré !) de données.
ID_Donnée ID_Machine Heure Etat
1 4849 16:55:43 1
2 4849 16:55:44 1
3 4849 16:55:45 1
4 4849 16:55:46 1
5 4849 16:55:47 2
6 4849 16:55:48 2
7 4849 16:55:49 2
8 4849 16:56:50 1
9 4849 16:56:51 1
10 4849 16:56:52 1



Donc voici ma proposition en 3 requêtes (à adapter) :

La 1ère requete nommée "ListeDebutFin" :

SELECT TOP 1 T.[ID_Donnée], T.[ID_Machine], T.Etat, T.HeureEnr, "Fin" AS Ch
FROM LaTable AS T
ORDER BY T.[ID_Donnée] DESC
UNION
SELECT TOP 1 T.[ID_Donnée], T.[ID_Machine], T.Etat, T.HeureEnr, "Début"
FROM LaTable AS T
ORDER BY T.[ID_Donnée]
UNION
SELECT T1.[ID_Donnée], T1.[ID_Machine], T1.Etat, T1.HeureEnr, "Début"
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.[ID_Machine]=T2.[ID_Machine]
And DateDiff("s",T1.HeureEnr,T2.HeureEnr)=-1)
WHERE (T1.Etat-T2.Etat<>0)
UNION
SELECT T1.[ID_Donnée], T1.[ID_Machine], T1.Etat, T1.HeureEnr, "Fin"
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.[ID_Machine]=T2.[ID_Machine]
And DateDiff("s",T1.HeureEnr,T2.HeureEnr)=1)
WHERE (T1.Etat-T2.Etat<>0);

La 2ème requête nommée "NbDebutFin" :

SELECT T1.ID_Machine, T1.HeureEnr, T1.Ch, Count(T2.HeureEnr) AS Nb
FROM ListeDebutFin AS T1 INNER JOIN ListeDebutFin AS T2
ON (T1.HeureEnr>=T2.HeureEnr) AND (T1.Ch=T2.Ch)
AND (T1.ID_Machine=T2.ID_Machine)
GROUP BY T1.ID_Machine, T1.HeureEnr, T1.Ch;

Et la 3ème requête qui fournit le résultat demandé :

TRANSFORM First(T1.HeureEnr) AS Ch1
SELECT T1.ID_Machine, T1.Etat
FROM ListeDebutFin AS T1 INNER JOIN NbDebutFin AS T2
ON T1.HeureEnr=T2.HeureEnr
GROUP BY T1.ID_Machine, T1.Etat, T2.Nb
ORDER BY T1.ID_Machine, T2.Nb
PIVOT T1.Ch;
Avatar
Michel__D
Michel__D a écrit :
Bonjour,

Didou a écrit :
Bonjour Jac (et à toute la communauté)

Suite à ta demande voici un exemple (concentré !) de données.
ID_Donnée ID_Machine Heure Etat
1 4849 16:55:43 1
2 4849 16:55:44 1
3 4849 16:55:45 1
4 4849 16:55:46 1
5 4849 16:55:47 2
6 4849 16:55:48 2
7 4849 16:55:49 2
8 4849 16:56:50 1
9 4849 16:56:51 1
10 4849 16:56:52 1



Donc voici ma proposition en 3 requêtes (à adapter) :

La 1ère requete nommée "ListeDebutFin" :

SELECT TOP 1 T.[ID_Donnée], T.[ID_Machine], T.Etat, T.HeureEnr, "Fin" AS Ch
FROM LaTable AS T
ORDER BY T.[ID_Donnée] DESC
UNION
SELECT TOP 1 T.[ID_Donnée], T.[ID_Machine], T.Etat, T.HeureEnr, "Début"
FROM LaTable AS T
ORDER BY T.[ID_Donnée]
UNION
SELECT T1.[ID_Donnée], T1.[ID_Machine], T1.Etat, T1.HeureEnr, "Début"
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.[ID_Machine]=T2.[ID_Machine]
And DateDiff("s",T1.HeureEnr,T2.HeureEnr)=-1)
WHERE (T1.Etat-T2.Etat<>0)
UNION
SELECT T1.[ID_Donnée], T1.[ID_Machine], T1.Etat, T1.HeureEnr, "Fin"
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.[ID_Machine]=T2.[ID_Machine]
And DateDiff("s",T1.HeureEnr,T2.HeureEnr)=1)
WHERE (T1.Etat-T2.Etat<>0);

La 2ème requête nommée "NbDebutFin" :

SELECT T1.ID_Machine, T1.HeureEnr, T1.Ch, Count(T2.HeureEnr) AS Nb
FROM ListeDebutFin AS T1 INNER JOIN ListeDebutFin AS T2
ON (T1.HeureEnr>=T2.HeureEnr) AND (T1.Ch=T2.Ch)
AND (T1.ID_Machine=T2.ID_Machine)
GROUP BY T1.ID_Machine, T1.HeureEnr, T1.Ch;

Et la 3ème requête qui fournit le résultat demandé :

TRANSFORM First(T1.HeureEnr) AS Ch1
SELECT T1.ID_Machine, T1.Etat
FROM ListeDebutFin AS T1 INNER JOIN NbDebutFin AS T2
ON T1.HeureEnr=T2.HeureEnr
GROUP BY T1.ID_Machine, T1.Etat, T2.Nb
ORDER BY T1.ID_Machine, T2.Nb
PIVOT T1.Ch;



Un oubli sur la 3ème requête :

TRANSFORM First(T1.HeureEnr) AS Ch1
SELECT T1.ID_Machine, T1.Etat
FROM ListeDebutFin AS T1 INNER JOIN NbDebutFin AS T2
ON (T1.ID_Machine=T2.ID_Machine AND T1.HeureEnr=T2.HeureEnr)
GROUP BY T1.ID_Machine, T1.Etat, T2.Nb
ORDER BY T1.ID_Machine, T2.Nb
PIVOT T1.Ch;
Avatar
Didou
Bonjour Michel_D

Bonjour

Grand merci pour votre temps, je découvre (avec surprise mais aussi avec
plaisir !) votre réponse après quelques jours passés sur d'autres dossiers.
Si je comprends bien, la première requête ListeDebutFin devrait donner le
résultat suivant :

ID_Donnée ID_Machine Etat HeureEnr Ch
1 4849 1 16:55:43 Début
4 4849 1 16:55:46 Fin
5 4849 2 16:55:47 Début
7 4849 2 16:55:49 Fin
8 4849 1 16:55:50 Début
10 4849 1 16:56:52 Fin

Hors les lignes concernant l'ID_Donnée 7 et 8 n'apparaissent pas, n'étant
pas utilisateur du langage SQL (une lacune qu'il va me falloir combler au
plus vite !), je ne vois pas comment corriger le code.

Merci encore.

Didou


"Michel__D" a écrit :

Michel__D a écrit :
> Bonjour,
>
> Didou a écrit :
>> Bonjour Jac (et à toute la communauté)
>>
>> Suite à ta demande voici un exemple (concentré !) de données.
>> ID_Donnée ID_Machine Heure Etat
>> 1 4849 16:55:43 1
>> 2 4849 16:55:44 1
>> 3 4849 16:55:45 1
>> 4 4849 16:55:46 1
>> 5 4849 16:55:47 2
>> 6 4849 16:55:48 2
>> 7 4849 16:55:49 2
>> 8 4849 16:56:50 1
>> 9 4849 16:56:51 1
>> 10 4849 16:56:52 1
>
> Donc voici ma proposition en 3 requêtes (à adapter) :
>
> La 1ère requete nommée "ListeDebutFin" :
>
> SELECT TOP 1 T.[ID_Donnée], T.[ID_Machine], T.Etat, T.HeureEnr, "Fin" AS Ch
> FROM LaTable AS T
> ORDER BY T.[ID_Donnée] DESC
> UNION
> SELECT TOP 1 T.[ID_Donnée], T.[ID_Machine], T.Etat, T.HeureEnr, "Début"
> FROM LaTable AS T
> ORDER BY T.[ID_Donnée]
> UNION
> SELECT T1.[ID_Donnée], T1.[ID_Machine], T1.Etat, T1.HeureEnr, "Début"
> FROM LaTable AS T1 INNER JOIN LaTable AS T2
> ON (T1.[ID_Machine]=T2.[ID_Machine]
> And DateDiff("s",T1.HeureEnr,T2.HeureEnr)=-1)
> WHERE (T1.Etat-T2.Etat<>0)
> UNION
> SELECT T1.[ID_Donnée], T1.[ID_Machine], T1.Etat, T1.HeureEnr, "Fin"
> FROM LaTable AS T1 INNER JOIN LaTable AS T2
> ON (T1.[ID_Machine]=T2.[ID_Machine]
> And DateDiff("s",T1.HeureEnr,T2.HeureEnr)=1)
> WHERE (T1.Etat-T2.Etat<>0);
>
> La 2ème requête nommée "NbDebutFin" :
>
> SELECT T1.ID_Machine, T1.HeureEnr, T1.Ch, Count(T2.HeureEnr) AS Nb
> FROM ListeDebutFin AS T1 INNER JOIN ListeDebutFin AS T2
> ON (T1.HeureEnr>=T2.HeureEnr) AND (T1.Ch=T2.Ch)
> AND (T1.ID_Machine=T2.ID_Machine)
> GROUP BY T1.ID_Machine, T1.HeureEnr, T1.Ch;
>
> Et la 3ème requête qui fournit le résultat demandé :
>
> TRANSFORM First(T1.HeureEnr) AS Ch1
> SELECT T1.ID_Machine, T1.Etat
> FROM ListeDebutFin AS T1 INNER JOIN NbDebutFin AS T2
> ON T1.HeureEnr=T2.HeureEnr
> GROUP BY T1.ID_Machine, T1.Etat, T2.Nb
> ORDER BY T1.ID_Machine, T2.Nb
> PIVOT T1.Ch;

Un oubli sur la 3ème requête :

TRANSFORM First(T1.HeureEnr) AS Ch1
SELECT T1.ID_Machine, T1.Etat
FROM ListeDebutFin AS T1 INNER JOIN NbDebutFin AS T2
ON (T1.ID_Machine=T2.ID_Machine AND T1.HeureEnr=T2.HeureEnr)
GROUP BY T1.ID_Machine, T1.Etat, T2.Nb
ORDER BY T1.ID_Machine, T2.Nb
PIVOT T1.Ch;



Avatar
Michel__D
Bonjour,

Donne le SQL que tu as utilisé.

Didou a écrit :
Bonjour Michel_D

Bonjour

Grand merci pour votre temps, je découvre (avec surprise mais aussi avec
plaisir !) votre réponse après quelques jours passés sur d'autres dossiers.
Si je comprends bien, la première requête ListeDebutFin devrait donner le
résultat suivant :

ID_Donnée ID_Machine Etat HeureEnr Ch
1 4849 1 16:55:43 Début
4 4849 1 16:55:46 Fin
5 4849 2 16:55:47 Début
7 4849 2 16:55:49 Fin
8 4849 1 16:55:50 Début
10 4849 1 16:56:52 Fin

Hors les lignes concernant l'ID_Donnée 7 et 8 n'apparaissent pas, n'étant
pas utilisateur du langage SQL (une lacune qu'il va me falloir combler au
plus vite !), je ne vois pas comment corriger le code.

Merci encore.

Didou


"Michel__D" a écrit :

Michel__D a écrit :
Bonjour,

Didou a écrit :
Bonjour Jac (et à toute la communauté)

Suite à ta demande voici un exemple (concentré !) de données.
ID_Donnée ID_Machine Heure Etat
1 4849 16:55:43 1
2 4849 16:55:44 1
3 4849 16:55:45 1
4 4849 16:55:46 1
5 4849 16:55:47 2
6 4849 16:55:48 2
7 4849 16:55:49 2
8 4849 16:56:50 1
9 4849 16:56:51 1
10 4849 16:56:52 1


Donc voici ma proposition en 3 requêtes (à adapter) :

La 1ère requete nommée "ListeDebutFin" :

SELECT TOP 1 T.[ID_Donnée], T.[ID_Machine], T.Etat, T.HeureEnr, "Fin" AS Ch
FROM LaTable AS T
ORDER BY T.[ID_Donnée] DESC
UNION
SELECT TOP 1 T.[ID_Donnée], T.[ID_Machine], T.Etat, T.HeureEnr, "Début"
FROM LaTable AS T
ORDER BY T.[ID_Donnée]
UNION
SELECT T1.[ID_Donnée], T1.[ID_Machine], T1.Etat, T1.HeureEnr, "Début"
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.[ID_Machine]=T2.[ID_Machine]
And DateDiff("s",T1.HeureEnr,T2.HeureEnr)=-1)
WHERE (T1.Etat-T2.Etat<>0)
UNION
SELECT T1.[ID_Donnée], T1.[ID_Machine], T1.Etat, T1.HeureEnr, "Fin"
FROM LaTable AS T1 INNER JOIN LaTable AS T2
ON (T1.[ID_Machine]=T2.[ID_Machine]
And DateDiff("s",T1.HeureEnr,T2.HeureEnr)=1)
WHERE (T1.Etat-T2.Etat<>0);

La 2ème requête nommée "NbDebutFin" :

SELECT T1.ID_Machine, T1.HeureEnr, T1.Ch, Count(T2.HeureEnr) AS Nb
FROM ListeDebutFin AS T1 INNER JOIN ListeDebutFin AS T2
ON (T1.HeureEnr>=T2.HeureEnr) AND (T1.Ch=T2.Ch)
AND (T1.ID_Machine=T2.ID_Machine)
GROUP BY T1.ID_Machine, T1.HeureEnr, T1.Ch;

Et la 3ème requête qui fournit le résultat demandé :

TRANSFORM First(T1.HeureEnr) AS Ch1
SELECT T1.ID_Machine, T1.Etat
FROM ListeDebutFin AS T1 INNER JOIN NbDebutFin AS T2
ON T1.HeureEnr=T2.HeureEnr
GROUP BY T1.ID_Machine, T1.Etat, T2.Nb
ORDER BY T1.ID_Machine, T2.Nb
PIVOT T1.Ch;


Un oubli sur la 3ème requête :

TRANSFORM First(T1.HeureEnr) AS Ch1
SELECT T1.ID_Machine, T1.Etat
FROM ListeDebutFin AS T1 INNER JOIN NbDebutFin AS T2
ON (T1.ID_Machine=T2.ID_Machine AND T1.HeureEnr=T2.HeureEnr)
GROUP BY T1.ID_Machine, T1.Etat, T2.Nb
ORDER BY T1.ID_Machine, T2.Nb
PIVOT T1.Ch;





1 2