Dzienne zużycie energii elektrycznej - jak powinno wyglądać zapytanie SQL

0

chciałbym wyciągnąć dane z tabeli gdzie generowane są rekordy z maszyn produkcyjnych dotyczące zużycia energii elektrycznej - baza danych SQL Server. Program monitorujący dokonuje odczytu co sekundę z kilkunastu maszyn wstawiając do tabeli rekord ze stanem licznika zuzycia prądu. Łącznie tabela maszynaZuzytaEnergia zawiera już kilka mln rekordów.
Produkcję w mojej firmie interesuje jakie jest dzienne zużycie energii przez konkretna maszynę.
Potrafię sobie z tym poradzić używając excela i tabel przestawnych, ale to nie jest wyjście. Najlepszym rozwiązaniem jest stworzenie widoku / zapytania w bazie danych, które grupuje odczyty dla konkretnych ID maszyn i dni pokazuje wartość maksymalną i minimalną dla konkretnego dnia, a w dodatkowym polu pokazuje zużycie dzienne wyliczonę po przez różnicę wartości maksymalnej odczytu zużycia energii i wartości minimalnej zużycia energii w tym dniu.
Niestety nie mogę sobie z tym poradzić.
Poniżej informacje o właściwościach tabeli, oraz przykładowy efekt wykonania zapytania z ograniczeniem do 2 dni i przykład tabeli jaką miałoby generować zapytanie pokazujące zużycie dzienne dla konkretnej maszyny.

Struktura tabeli
screenshot-20221028143453.png

Dane źródłowe na podstawie zapytania

select mze.id, mze.rejestrMaszynId, mze.czas, mze.energiaKWh from maszynaZuzytaEnergia mze where YEAR (mze.czas)=2022 and MONTH(mze.czas)=10 and day(mze.czas) in (21,22)

screenshot-20221028143544.png

Efekt jaki chciałbym uzyskać (na przykładzie tabeli przestawnej z Excela)

screenshot-20221028143713.png

Proszę o pomoc.

1
admin41 napisał(a):

chciałbym wyciągnąć dane z tabeli gdzie generowane są rekordy z maszyn produkcyjnych dotyczące zużycia energii elektrycznej - baza danych SQL Server. Program monitorujący dokonuje odczytu co sekundę z kilkunastu maszyn wstawiając do tabeli rekord ze stanem licznika zuzycia prądu.

na marginesie głownego pytania: czemu służy / co jeszcze monitoruje, jeśli zczytuje co sekundę?
Mainstreamowe (tj atestowane) liczniki w ogóle nie pracują w tym rytmie.

To nie ma sensu (jeśli nie zachodzą dodatkowe okoliczności)

0
ZrobieDobrze napisał(a):
admin41 napisał(a):

chciałbym wyciągnąć dane z tabeli gdzie generowane są rekordy z maszyn produkcyjnych dotyczące zużycia energii elektrycznej - baza danych SQL Server. Program monitorujący dokonuje odczytu co sekundę z kilkunastu maszyn wstawiając do tabeli rekord ze stanem licznika zuzycia prądu.

na marginesie głownego pytania: czemu służy / co jeszcze monitoruje, jeśli zczytuje co sekundę?
Mainstreamowe (tj atestowane) liczniki w ogóle nie pracują w tym rytmie.

To nie ma sensu (jeśli nie zachodzą dodatkowe okoliczności)

Na produkcji jest kilkadziesiąt maszyn, które mają między innymi zainstalowane liczniki zużycia energii z których w krótkich odstepach czasu pobierane są informacje o zuzyciu kWh. Kilka lat temu zaisntalowano system do zczytywania parametrów maszyn (większość nie jest w tej chwili istotnych) w tym jest również parametr dotyczący zużycia energii. Niestety system posiada dosyć toporny i przestarzały interfejs, który wyświetla tylko podsumowania pewnych parametrów bez możliwości ich eksportowania.
Produkcja na maszynach jest seryjna i w ERP wprowadzane sa ręcznie dane dotyczące zleceń produkcyjnych zawierające dane ilościowe zużytych materiałów i wytworzonych produktów oraz czasu pracy. W mojej branży istotnym kosztem jest zużycie energii, dlatego poproszono mnie o dodanie do zleceń rzeczywistych kosztów zużycia energii. Dlatego próbuję je wyciagnąć bezpośrednio z bazy danych i zaimportować do bazy ERP, która służy również do kalkulacji (aktualizacji) TKW produktów, które są wytwarzane na tych maszynach.

0

Nie jestem pewien, czy zadziała, ale może:

select 
  mze.rejestrMaszynId, 
  max(mze.energiaKWh) - min(mze.energiaKWh),
  Cast(mze.czas AS date) czas_trunc
from maszynaZuzytaEnergia mze 
where 
  YEAR (mze.czas)=2022 and MONTH(mze.czas)=10 and day(mze.czas) in (21,22)
group by 
  mze.rejestrMaszynId, 
  Cast(mze.czas AS date)

ps. jeśli dałbyś przykład na http://sqlfiddle.com byłoby łatwiej to napisać i sprawdzić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1