Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Queue to get workload in 2 weeks [SQL Server]

Currently, the queue shows me the workload of products in a oven and for product which are in the oven too, but actually for some hours in a test outside of the oven.

I count the h with "gesamt" for each product -> this show me how Long they stay already in the oven. Mostly the products stay 1000h in the oven its defined in "Zielgröße" in the db.

What I want is that the queue should show me the workload of the oven for the next 2 weeks as a prediction (336h). Thats all "gesamt" which is over "Zielgröße" (mostly 1000) not shown in the queue maybe handled in a temporary table or whatever.

Is it possible to handle this in Micrososft SQL Server?

Here is the code:

SELECT TesterID,Name, TesterNr, COUNT(Name) as Anzahl, gesamt  FROM 
(SELECT AllgemeineAngaben.QualiID, 
                                Bezeichnung, 
                                AnzModule, 
                                Tester.Name, TesterNr, 
                                Testname,
                                v_gesamtBerechnungLaufend.TestaufstellungID, 
                                lastRO, 
                                gesamt, 
                                v_gesamtBerechnungLaufend.Einheit, 
                                v_gesamtBerechnungLaufend.PlanID,
                                v_gesamtBerechnungLaufend.TesterID
                        FROM DB.dbo.AllgemeineAngaben inner join
                        DB.dbo.v_gesamtBerechnungLaufend on 
                        AllgemeineAngaben.QualiID = v_gesamtBerechnungLaufend.QualiID inner join
                        DB.dbo.Tester on  
                        Tester.TesterID = v_gesamtBerechnungLaufend.TesterID inner join
                        DB.dbo.Testaufstellung on  
                        Testaufstellung.TestaufstellungID = v_gesamtBerechnungLaufend.TestaufstellungID inner join
                        DB.dbo.Testnamen on Testnamen.TestnameID = Testaufstellung.TestnameID
                        Where Tester.Name = 'KPS02'
                            UNION ALL
                            SELECT  AllgemeineAngaben.QualiID, 
                        Bezeichnung, AnzModule, Tester.Name, TesterNr, 
                        Testname,
                        Testaufstellung.TestaufstellungID, 
                        v_gesamtBerechnung.gesamt as lastRO, 
                        v_gesamtBerechnung.gesamt, 
                        v_gesamtBerechnung.Einheit, 
                        v_gesamtBerechnung.PlanID, 
                        v_gesamtBerechnung.TesterID
                FROM    DB.dbo.AllgemeineAngaben inner join
                        DB.dbo.v_gesamtBerechnung on 
                        AllgemeineAngaben.QualiID = v_gesamtBerechnung.QualiID inner join
                        DB.dbo.Tester on  
                        Tester.TesterID = v_gesamtBerechnung.TesterID inner join
                        DB.dbo.Testaufstellung on  
                        Testaufstellung.TestaufstellungID = v_gesamtBerechnung.TestaufstellungID inner join
                        DB.dbo.Testnamen on Testnamen.TestnameID = Testaufstellung.TestnameID
                        WHERE Testaufstellung.fertig ='0'
                        AND Testaufstellung.aktiv ='1'
                        AND Testaufstellung.Zielgröße > v_gesamtBerechnung.gesamt
                        AND Tester.Name = 'KPS02'
                        AND v_gesamtBerechnung.TestaufstellungID not in (Select TestaufstellungID from DB.dbo.v_gesamtBerechnungLaufend)) x
                        group by TesterID, Name, TesterNr, gesamt

Here the table to show in an example what I want

actual workload

          TesterID       Name    TesterNr   Anzahl      gesamt
          -------------- ------- ---------- ----------- -----------
Product1    8              KPS02   2          1           209
Product2    8              KPS02   2          1           216
Product3    8              KPS02   2          1           816
Product4    8              KPS02   2          1           835

workload in 2 weeks

         TesterID       Name    TesterNr   Anzahl      gesamt
         -------------- ------- ---------- ----------- -----------
Product1        8              KPS02   2          1           545
Product2        8              KPS02   2          1           552

the last recors are over 1000 Zielgröße, so just dont show them in the prediction queue

Product3    8              KPS02   2          1           1152
Product4    8              KPS02   2          1           1171

I hope you guys can follow me. Thanks for your help.

like image 631
Daniel Avatar asked Apr 05 '19 10:04

Daniel


1 Answers

I'll edit this answer until it's solved, but here's my first attempt:

SELECT TesterID,Name, TesterNr, COUNT(Name) as Anzahl, gesamt + 336 as gesamt
FROM 
(SELECT AllgemeineAngaben.QualiID, 
                                Bezeichnung, 
                                AnzModule, 
                                Tester.Name, TesterNr, 
                                Testname,
                                v_gesamtBerechnungLaufend.TestaufstellungID, 
                                lastRO, 
                                gesamt, 
                                v_gesamtBerechnungLaufend.Einheit, 
                                v_gesamtBerechnungLaufend.PlanID,
                                v_gesamtBerechnungLaufend.TesterID
                        FROM DB.dbo.AllgemeineAngaben inner join
                        DB.dbo.v_gesamtBerechnungLaufend on 
                        AllgemeineAngaben.QualiID = v_gesamtBerechnungLaufend.QualiID inner join
                        DB.dbo.Tester on  
                        Tester.TesterID = v_gesamtBerechnungLaufend.TesterID inner join
                        DB.dbo.Testaufstellung on  
                        Testaufstellung.TestaufstellungID = v_gesamtBerechnungLaufend.TestaufstellungID inner join
                        DB.dbo.Testnamen on Testnamen.TestnameID = Testaufstellung.TestnameID
                        Where Tester.Name = 'KPS02'
                            UNION ALL
                            SELECT  AllgemeineAngaben.QualiID, 
                        Bezeichnung, AnzModule, Tester.Name, TesterNr, 
                        Testname,
                        Testaufstellung.TestaufstellungID, 
                        v_gesamtBerechnung.gesamt as lastRO, 
                        v_gesamtBerechnung.gesamt, 
                        v_gesamtBerechnung.Einheit, 
                        v_gesamtBerechnung.PlanID, 
                        v_gesamtBerechnung.TesterID
                FROM    DB.dbo.AllgemeineAngaben inner join
                        DB.dbo.v_gesamtBerechnung on 
                        AllgemeineAngaben.QualiID = v_gesamtBerechnung.QualiID inner join
                        DB.dbo.Tester on  
                        Tester.TesterID = v_gesamtBerechnung.TesterID inner join
                        DB.dbo.Testaufstellung on  
                        Testaufstellung.TestaufstellungID = v_gesamtBerechnung.TestaufstellungID inner join
                        DB.dbo.Testnamen on Testnamen.TestnameID = Testaufstellung.TestnameID
                        WHERE Testaufstellung.fertig ='0'
                        AND Testaufstellung.aktiv ='1'
                        AND Testaufstellung.Zielgröße > v_gesamtBerechnung.gesamt
                        AND Tester.Name = 'KPS02'
                        AND v_gesamtBerechnung.TestaufstellungID not in (Select TestaufstellungID from DB.dbo.v_gesamtBerechnungLaufend)) x
                        group by TesterID, Name, TesterNr, gesamt
) A
WHERE gesamt + 336 < 1000

It seems to me like all you need to do is add 336 to the current values and then filter out anything less than 1000.

like image 144
Jim Jimson Avatar answered Nov 13 '22 12:11

Jim Jimson