Jak stworzyc pole arytmetyczne odejmujace wartosci rekordow ? Access 2007

0

Witam szanowne grono forumowiczow.

Jestem tu nowy takze jak temat jest w zlym dziale to prosze o przeniesienie do odpowiedniego.

Z tworzeniem baz nie mam nic wspolnego, jakby moje pytanie bylo banalne to z gory przepraszam.

Stworzylem sobie baze danych ktora ma mi pomoc w obliczaniu przychodu z maszyn samoserwujacych, oraz w zamysle sprawdzac czy nie gina mi przychody.
Utknalem na temacie stworzenia dzialania ktore bedzie odejmowalo od nowego rekordu poprzedni, tak mi sie przynajmniej wydaje ze powinno to wygladac aby z licznikow otrzymac faktyczny przychod, gdyz liczniki przy kazdym odbiorze sie nie resetuja.

Wyglada to tak

Mamy np w szpitalu maszyne "puszka"

  • 1 stycznia 2019 roku mamy pierwszy odbior i licznik wskazuje 20zl i tyle samo mamy w boksie z pieniedzmi tj 20zl
  • 5 stycznia 2019 roku mamy kolejny odbior i licznik wskazuje 36zl w boxie realnie mamy 16zl.
    -10 stycznia 2019 roku mamy trzeci odbior i licznik skazuje 55zl w boxie realnie mamy 19zl

baza 1.jpgNie wiem wlasnie czy powinna byc stworzona kolejna tabela z taka funkcjonalnoscia, czy moze kwerend albo raport. na pewno musibyc to oparte o klienta, maszyne i date, bo w bazie moze byc np 20 roznych miejsc gdzie bedzie stalo lacznie np 50 maszyn.

Jakby ktos z was mial pomysl jak to rozwiazac bylo by super.

0

Tyle się opisałeś a screen ma mało co wspólnego z opisem, ja nadal nie wiem co chcesz zrobić

0

Ok, faktycznie moze tak byc bo screen ma inne nazwy niz opis.
To ze screenu - mamy kolumne "box" to sa stany licznikow przy kazdym odbiorze pieniedzy. Chcialbym aby od licznika z nowa data odejmowal sie licznik z data wczesniejsza, czyli w tym przypadku wartosc box z daty 01.03.19 odjac od wartosci box z 03.01.19 czyli 20 - 10 = 10, ponownie wartosc box z daty 03.01.19 odjac od wartosci box z 06.01.19 czyli 30-20=10 itd. Mam nadzieje ze teraz jest to bardziej zrozumiale.

Mozna to opisac np na przykladzie zuzycia pradu w domu. Mamy np 1 stycznia i stan licznika 100kWh i ponownie sprawdzamy 1 lutego i mamy 150kWh, czyli za okres od pierwszego stycznia do pierwszego lutego zuzylismy 50kWh.

2

W kwerendzie

SELECT 
    t.[date]
    , t.box
    ,t.box-nz((select top  1 box from records as ost where ost.[date] <t.[date] order by [date] desc)) as  roznica
FROM records as t;

Nie sprawdzi się jeżeli będzie w jednym dniu zmiana.

0

Dzieki, dziala fajnie tak jak chcialem, tylko tak jak piszesz jezeli w danym dniu mamy tylko jeden rekord, a da sie zrobic tak zeby dzialalo dla roznych punktow i maszyn odebranych tego samego dnia ? Nr Clienta w tabeli sites ma przypisana maszyne, przy danym kliencie czasami jest kilka roznych maszyn. zazwyczaj odbierane sa jednego dnia wszystkie. baza 2.jpgbaza 3.jpg

1

Musisz w tym polu:

,t.box-nz((SELECT top  1 box FROM records AS ost WHERE ost.[DATE] <t.[DATE] ORDER BY [DATE] DESC)) AS  roznica

rozbudować warunek w WHERE:

WHERE ost.[DATE] <t.[DATE]  and ost.[client id]=t.[client id]
0

zmienilem client id na nr clienta, i dziala, super wielkie dzieki.

0

Kolego Panczo, stworzylem sobie jeszcze jedna kolumne w tej kwerendzie, czy to jest prawidlowe ? bynajmniej pokazuje prawidlowe wartosci ale ...

[t].[box]-nz((SELECT top  1 box FROM records AS ost WHERE ost.[DATE] <t.[DATE] AND ost.[nr clienta]=t.[nr clienta] ORDER BY [DATE] DESC)) -[t].[Bag] AS Straty
0

Skoro działa to chyba jest dobrze

0

ok dzieki.

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