Merci du conseil je vais aller voir sur le net ce qu'est un index , mais d'abord je creer tous les cas possibles en remplissant ma table.
Merci du conseil je vais aller voir sur le net ce qu'est un index , mais d'abord je creer tous les cas possibles en remplissant ma table.
J'ai un problème , la requête marche que si les evenement se suivent :
NEvenement NMachine Type Instant
1 0 ManuelON 01/01/2001 08:00:00
2 0 BrocheON 01/01/2001 08:01:00
3 0 BrocheOFF 01/01/2001 08:20:00
4 0 ManuelOFF 01/01/2001 08:21:00
5 0 BrocheON 01/01/2001 08:21:00
6 0 BrocheOFF 01/01/2001 09:00:00
7 0 ManuelON 01/01/2001 09:00:00
8 0 ManuelOFF 01/01/2001 09:01:00
Voyez ma table , je lance ma requête et j'ai 58 minutes de production et seulement une minute de reglages (correspond au temps entre chaque ON/OFF manuel).Ce qui veut dire que l'evenement 1 et 4 ne sont pas pris en compte.
Ma requête ne retournait que le temps d'activité de la broche par machine.
Il faudrait montrer votre autre requête pour trouver des erreurs dans la prise en compte des pannes.
Voila , strictement la même seulement avec le type qui change.Seulement donc si jai :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SELECT EvenementOn.NMachine, SUM(Datediff("s",EvenementOn.Instant, EvenementOff.Instant)/60) AS [Temps total en Réglages(min)] FROM Evenement AS EvenementOn, Evenement AS EvenementOff WHERE EvenementOn.Type LIKE 'ManuelON' AND EvenementOff.Type LIKE 'ManuelOFF' AND EvenementOn.NMachine = EvenementOff.NMachine AND EvenementOn.Instant < EvenementOff.Instant AND NOT EXISTS ( SELECT 1 FROM Evenement WHERE Evenement.NMachine = EvenementOff.NMachine AND Evenement.Instant < EvenementOff.Instant AND Evenement.Instant > EvenementOn.Instant ) GROUP BY EvenementOn.NMachine;
ManuelON,BrocheON,BrocheOFF,ManuelOFF dans l'ordre dans ma table la requête ne detecte pas les manuels
J'ai pensé modifier comme ceci :
Mais maintenant j'ai 83 minutes de réglages :s lol.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 AND NOT EXISTS ( SELECT 1 FROM Evenement WHERE Evenement.NMachine = EvenementOff.NMachine AND EvenementOn.Type LIKE 'BrocheON' AND EvenementOff.Type LIKE 'BrocheOFF' AND Evenement.Instant < EvenementOff.Instant AND Evenement.Instant > EvenementOn.Instant )
avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 NEvenement NMachine Type Instant 1 0 ManuelON 01/01/2001 08:00:00 2 0 BrocheON 01/01/2001 08:01:00 3 0 BrocheOFF 01/01/2001 08:20:00 4 0 ManuelOFF 01/01/2001 08:21:00 5 0 BrocheON 01/01/2001 08:21:00 6 0 BrocheOFF 01/01/2001 09:00:00 7 0 ManuelON 01/01/2001 09:00:00 8 0 ManuelOFF 01/01/2001 09:01:00
Mea culpa, les tests utilisaient des jeux d'essai un peu trop réduits.
Dans la sous requête corrélées j'ai oublié de ne tenir compte que des évènement de terminaison (OFF). J'ai donc ajouté :
ce qui donne au final :
Code : Sélectionner tout - Visualiser dans une fenêtre à part AND Evenement.Type LIKE EvenementOff.Type
Cette correction est bien entendue valable quelque soit le type d'événement qu'on veut comptabiliser.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SELECT EvenementOn.NMachine, SUM(Datediff("s",EvenementOn.Instant, EvenementOff.Instant)) FROM Evenement AS EvenementOn, Evenement AS EvenementOff WHERE EvenementOn.Type LIKE 'ManuelON' AND EvenementOff.Type LIKE 'ManuelOFF' AND EvenementOn.NMachine = EvenementOff.NMachine AND EvenementOn.Instant < EvenementOff.Instant AND NOT EXISTS ( SELECT 1 FROM Evenement WHERE Evenement.NMachine = EvenementOff.NMachine AND Evenement.Instant < EvenementOff.Instant AND Evenement.Instant > EvenementOn.Instant AND Evenement.Type LIKE EvenementOff.Type ) GROUP BY EvenementOn.NMachine;
Merci bien , si vous savez comment savoir que a chaque BrocheON je n'ai aucun ManuelON d'enclenché ou PanneON je suis preneur![]()
J'ai dépensé mon quota pour vous aujourd'hui.
Mais de la même manière que j'ai cherché l'évènement BrocheOFF directement consécutif à un évènement BrocheON, vous pouvez essayer de cogiter pour trouver la période Manuel au sein d'une période de BrocheON.
Voila j'ai eu pas mal d'idée et la dernière fue la moins bonne je crois : )
Je comptais dire que je ne pouvais pas trouvé de brocheOFF tel qu'il soit encadré par un ManuelOFF et un ManuelON.
Seulement , j'ai quand même choisit un brocheON et donc il me met un 28000 à peu pret en temps avec la soustraction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 SELECT SUM(Datediff("s",EvenementOn.Instant, EvenementOff.Instant)/60) AS [Temps total en Production(min)] FROM Evenement AS EvenementOn, Evenement AS EvenementOff,Evenement AS EvenementManuelOn,Evenement AS EvenementManuelOff WHERE EvenementOn.Type LIKE 'BrocheON' AND EvenementOff.Type LIKE 'BrocheOFF' AND EvenementManuelOff.Type LIKE 'ManuelOFF' AND EvenementManuelOn.Type LIKE 'ManuelON' AND EvenementOff.NMachine = [Entrez le numéro de la Machine] AND EvenementManuelOn.NMachine = EvenementOff.NMachine AND EvenementManuelOn.NMachine = EvenementManuelOFf.NMachine AND EvenementOn.NMachine = EvenementOff.NMachine AND EvenementOn.Instant < EvenementOff.Instant AND EvenementManuelOn.Instant < EvenementManuelOff.Instant AND NOT EXISTS ( SELECT 1 FROM Evenement WHERE Evenement.NMachine = EvenementOff.NMachine AND Evenement.Instant < EvenementOff.Instant AND Evenement.Instant > EvenementOn.Instant AND Evenement.Type LIKE EvenementOff.Type AND Evenement.Instant < EvenementManuelOff.Instant AND Evenement.Instant > EvenementManuelOn.Instant ) GROUP BY EvenementOn.NMachine;
Il faut donc que je choisisse un BrocheON tel qu'aucun ManuelON n'existse tel que les deux soient consécutif et de même pour le brocheOFF.
J'ai pensé à ça mais le résultat est le même je ne comprend toujours pas pourquoi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 SELECT SUM(Datediff("s",EvenementOn.Instant, EvenementOff.Instant)/60) AS [Temps total en Production(min)] FROM Evenement AS EvenementOn, Evenement AS EvenementOff,Evenement AS EvenementManuelOn,Evenement AS EvenementManuelOff WHERE EvenementOn.Type LIKE 'BrocheON' AND EvenementOff.Type LIKE 'BrocheOFF' AND EvenementManuelOff.Type LIKE 'ManuelOFF' AND EvenementManuelOn.Type LIKE 'ManuelON' AND EvenementOff.NMachine = [Entrez le numéro de la Machine] AND EvenementManuelOn.NMachine = EvenementOff.NMachine AND EvenementManuelOn.NMachine = EvenementManuelOFf.NMachine AND EvenementOn.NMachine = EvenementOff.NMachine AND EvenementOn.Instant < EvenementOff.Instant AND EvenementManuelOn.Instant < EvenementManuelOff.Instant AND NOT EXISTS ( SELECT 1 FROM Evenement WHERE Evenement.NMachine = EvenementOff.NMachine AND Evenement.Instant < EvenementOff.Instant AND Evenement.Instant > EvenementOn.Instant AND Evenement.Type LIKE EvenementOff.Type AND Evenement.Instant < EvenementManuelOff.Instant AND Evenement.Instant > EvenementManuelOn.Instant ) AND NOT EXISTS ( SELECT 1 FROM Evenement WHERE Evenement.NMachine = EvenementOn.NMachine AND Evenement.Instant > EvenementOn.Instant AND Evenement.Instant < EvenementOff.Instant AND Evenement.Type LIKE EvenementOn.Type AND Evenement.Instant > EvenementManuelOff.Instant AND Evenement.Instant < EvenementManuelOn.Instant ) GROUP BY EvenementOn.NMachine;.
Voila la table :
Et après réflexion mon encadrement esttrop vaste !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 NEvenement NMachine Type Instant 1 0 ManuelON 01/01/2001 08:00:00 2 0 BrocheON 01/01/2001 08:01:00 3 0 BrocheOFF 01/01/2001 08:20:00 4 0 ManuelOFF 01/01/2001 08:21:00 5 0 BrocheON 01/01/2001 08:21:00 6 0 BrocheOFF 01/01/2001 09:00:00 7 0 ManuelON 01/01/2001 09:00:00 8 0 ManuelOFF 01/01/2001 09:01:00 9 0 PanneON 01/01/2001 09:01:00 10 0 PanneOFF 01/01/2001 12:00:00 11 1 ManuelON 01/01/2001 08:00:00 12 1 BrocheON 01/01/2001 08:01:00 13 1 BrocheOFF 01/01/2001 08:20:00 14 1 ManuelOFF 01/01/2001 08:21:00 15 1 BrocheON 01/01/2001 08:21:00 16 1 BrocheOFF 01/01/2001 09:00:00 17 1 ManuelON 01/01/2001 09:00:00 18 1 ManuelOFF 01/01/2001 09:01:00 19 1 PanneON 01/01/2001 09:01:00 20 1 PanneOFF 01/01/2001 12:00:00 21 0 ManuelON 02/01/2001 08:00:00 22 0 BrocheON 02/01/2001 08:01:00 23 0 BrocheOFF 02/01/2001 08:20:00 24 0 ManuelOFF 02/01/2001 08:21:00 25 0 BrocheON 02/01/2001 08:21:00 26 0 BrocheOFF 02/01/2001 09:00:00 27 0 ManuelON 02/01/2001 09:00:00 28 0 ManuelOFF 02/01/2001 09:01:00 29 0 PanneON 02/01/2001 09:01:00 30 0 PanneOFF 02/01/2001 12:00:00
Il y aura forcément un ManuelOFF plus grand que l'evenementOFF un un ManuelON plus petit que l'evenementON donc mon problème est de bien ciblé un evenementmanuelON et OFF en particulier :s
J'ai pensé à trouver un manuel on et manuel Off consécutyif et de regarder si mon broche off si bien choisi lui aussi n'était pas entre les deux :
Seulement , je trouve encore des résultat en multiple de 58 qui est le temps total en production sans prendre en compte le fait que je suis en mode manuel aussi ... ce qui est en fait le but de ma requête !!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 SELECT SUM(Datediff("s",EvenementOn.Instant, EvenementOff.Instant)/60) AS [Temps total en Production(min)] FROM Evenement AS EvenementOn, Evenement AS EvenementOff,Evenement AS EvenementManuelOff, Evenement AS EvenementManuelON WHERE EvenementOn.Type LIKE 'BrocheON' AND EvenementOff.Type LIKE 'BrocheOFF' AND EvenementManuelOn.Type LIKE 'ManuelON' AND EvenementManuelOff.Type LIKE 'ManuelOFF' AND EvenementOff.NMachine = [Entrez le numéro de la Machine] AND EvenementOn.NMachine = EvenementOff.NMachine AND EvenementManuelOn.NMachine = EvenementManuelOff.NMachine AND EvenementManuelOn.NMachine = EvenementOn.NMachine AND EvenementOn.Instant < EvenementOff.Instant AND EvenementManuelOn.Instant < EvenementManuelOff.Instant AND NOT EXISTS ( SELECT 1 FROM Evenement WHERE Evenement.NMachine = EvenementOff.NMachine AND Evenement.Instant < EvenementOff.Instant AND Evenement.Instant > EvenementOn.Instant AND Evenement.Type LIKE EvenementOff.Type ) AND NOT EXISTS ( SELECT 1 FROM Evenement WHERE Evenement.NMachine = EvenementManuelOff.NMachine AND Evenement.Instant < EvenementManuelOff.Instant AND Evenement.Instant > EvenementManuelOn.Instant AND Evenement.Type LIKE EvenementManuelOff.Type ) AND NOT Exists ( SELECT 1 FROM Evenement WHERE Evenement.NMachine = EvenementManuelOff.NMachine AND Evenement.Instant < EvenementManuelOff.Instant AND Evenement.Instant > EvenementManuelOn.Instant AND Evenement.Type LIKE EvenementOff.Type ) GROUP BY EvenementOn.NMachine;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager