Очередь SQL для получения рабочей нагрузки через 2 недели [SQL Server] - PullRequest
5 голосов
/ 05 апреля 2019

В настоящее время в очереди показывается рабочая нагрузка продуктов в духовом шкафу и продуктов, которые также находятся в духовом шкафу, но на самом деле в течение нескольких часов в тесте вне печи.

Я считаю «gesamt» для каждого продукта -> это показывает мне, как долго они остаются в духовке. В основном продукты хранятся в духовке 1000 часов, как указано в «Zielgröße» в БД.

То, что я хочу, - это то, что очередь должна показывать мне рабочую нагрузку печи в течение следующих 2 недель в качестве прогноза (336 часов). То есть все «gesamt» над «Zielgröße» (в основном 1000), не показанные в очереди, могут обрабатываться во временной таблице или как угодно.

Можно ли справиться с этим в Microsoft SQL Server Microsoft?

Вот код:

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

Вот таблица, чтобы показать в примере, что я хочу

фактическая рабочая нагрузка

          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

рабочая нагрузка за 2 недели

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

последние записи более 1000 Zielgröße, так что просто не показывайте их в очереди прогнозирования

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

Надеюсь, вы, ребята, сможете следовать за мной. Спасибо за вашу помощь.

1 Ответ

4 голосов
/ 16 апреля 2019

Я буду редактировать этот ответ, пока он не будет решен, но вот моя первая попытка:

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

Мне кажется, что все, что вам нужно сделать, это добавить 336 к текущим значениям, а затем отфильтровать все, что меньше 1000.

...