Gewogen gemiddelde prijs

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Marbius
  • Registratie: December 2010
  • Laatst online: 21-02 14:16
Graag wil ik weten hoe ik een gemiddelde prijs kan berekenen over huidige aantallen.

In de database heb ik de volgende tabel (negatieve aantallen zijn verkopen, positieve getallen aankopen):

code:
1
2
3
4
5
6
Amount   Price (= prijs per stuk)
   100      20
   200      25
   -50      30
   100      30
  -200      30



Om een gewogen gemiddelde te nemen doe je normaal het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Amount   Price   SumProd
   100      20      2000
   200      25      5000
   -50      30     -1500
   100      30      2500
  -200      30     -6000
------------------------
   400      75      9500   (voor de positieve amounts)
  -250      60     -7500   (voor de negatieve amounts)
------------------------
   150     135      2000   (totalen)

Gemiddelde aankoopprijs:
9500 / 400 = 23.75

Gemiddelde verkoopprijs:
-7500 / -250 = 30.00


Je koopt wat en tussentijds verkoop je dus wat. Heeft er iemand een idee hoe ik van het huidige aantal van 150 stuks de gemiddelde prijs kan berekenen?

Acties:
  • 0 Henk 'm!

  • storeman
  • Registratie: April 2004
  • Laatst online: 10:39
Wil je ervan uitgaan dat de eerst verkochte producten ook van de eerst gekochte producten afgaan? En welke prijs wil je weten, ik naam aan de inkoopprijs?

"Chaos kan niet uit de hand lopen"


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Welk systeem voor de waardering wil je gebruiken? Met FIFO bereken je het gewogen gemiddelde over 100 stuks a 30 en 50 stuks a 25.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 23-06 13:51

NMe

Quia Ego Sic Dico.

Je kan niet de inkoop- en de verkoopprijs in dezelfde grafiek laten zien dus ik zou eens beginnen met bedenken (en uitleggen) wat je eigenlijk wil tonen. De ontwikkeling van de inkoopprijs? Die van de verkoopprijs? De gemiddelde omzet? De gemiddelde winst? Ik kan uit je topicstart domweg niet opmaken wat je nu eigenlijk voor bedrag denkt te kunnen tonen: je hébt de gemiddelde aankoopprijs en je hebt de gemiddelde verkoopprijs.

[ Voor 25% gewijzigd door NMe op 11-01-2014 13:20 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Marbius
  • Registratie: December 2010
  • Laatst online: 21-02 14:16
Ik hoef geen grafiek oid. Ik wil enkel de gemiddelde aankoopprijs weten van het overgebleven aantal van 150. En ja dat mag gewoon FIFO.

Dan is de vraag op welke manier kan ik dat uit de database queryen?

Acties:
  • 0 Henk 'm!

  • Miyamoto
  • Registratie: Februari 2009
  • Laatst online: 06:11
Als je geen datum (of anderszins iets wat de volgorde bepaalt) hebt opgeslagen bij de prijzen: Niet. Je zult dus moeten weten wanneer je wat voor welke prijs hebt ingekocht of verkocht.

Ik weet niet wat je er uiteindelijk mee wil?

Acties:
  • 0 Henk 'm!

  • Marbius
  • Registratie: December 2010
  • Laatst online: 21-02 14:16
@rooot

Daar heb je helemaal gelijk in! ik heb er inderdaad ook een datum bij opgeslagen (was idd wel even handig om te vermelden), dus daar kan ik sowieso wel een order by overheen gooien om de juiste volgorde in tijd te krijgen. Ik heb de vraag even heel simpel gesteld, maar we kunnen dus aannemen dat in het voorbeeld de aankopen chronologisch verlopen met de oudste records boven.

Ik hou het gewoon FIFO, dus dan denk ik aan het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Query 1:
SELECT SUM(Amount) 
FROM   tabel

Uitkomst:
150

-------------

Query 2:
SELECT   Amount, Price
FROM     tabel 
WHERE    Amount > 0
ORDER BY datumtijd DESC

Uitkomst:
Amount   Price
   100      30
   200      25
   100      20


Op die manier heb ik een waarde van 150 uit Query 1 en een set aantallen en prijs uit Query 2. Iemand een idee hoe ik dan die 150 in het resultaat kan zoeken?

Iets als:
100 (eerste record) < 150 (totaal) --> 100 * 30 (met restant 50)
200 (tweede record) > 50 (restant) --> 50 * 25

[ Voor 5% gewijzigd door Marbius op 11-01-2014 14:02 ]


Acties:
  • 0 Henk 'm!

Anoniem: 26306

Dit kan niet zomaar. Als je het in je database wilt doen, kun je er een stored procedure voor maken. Ik zou het normaal gesproken in programmacode doen en niet in je database.

Een stored procedure zou er bijvoorbeeld als volgt uitzien:
SQL:
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
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `avg_buy_price`()
BEGIN
    DECLARE done INT DEFAULT FALSE;
    DECLARE stock INT;
    DECLARE need_amount INT;
    DECLARE stock_price INT;
    DECLARE cur_amount INT;
    DECLARE cur_price INT;
    DECLARE cur1 CURSOR FOR SELECT `amount`, `price` FROM `item` WHERE `amount` > 0 ORDER BY `stamp` DESC;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    SET stock = (SELECT SUM(amount) FROM item);
    SET need_amount = stock;
    SET stock_price = 0;

    OPEN cur1;
    stock_loop: LOOP
        FETCH cur1 INTO cur_amount, cur_price;
        IF done THEN
            LEAVE stock_loop;
        END IF;
        IF cur_amount < need_amount THEN
            SET need_amount = need_amount - cur_amount;
            SET stock_price = stock_price + (cur_price * cur_amount);
        ELSE
            SET stock_price = stock_price + (cur_price * need_amount);
            SET need_amount = 0;
        END IF;
        IF need_amount = 0 THEN
            LEAVE stock_loop;
        END IF;
    END LOOP;
    CLOSE cur1;
    SELECT stock_price / stock;
END$$
DELIMITER ;


Een reden om het niet in de database te doen zou zijn om het voor de gebruiker van het systeem inzichtelijker te maken hoe de prijs is opgebouwd. Je kunt wat mij betreft dus beter die ene query doen die de inkopen ophaalt, en daar doorheen lopen en een tabelletje opbouwen die voor de eindgebruiker laat zien welk deel van elke inkoop nog op voorraad is.

[edit]
En een voorbeeldje van hoe ik dat zie:
InkoopdatumPrijs (€)AantalVoorraadVoorraadprijs
04-01-201425,00200501250,00
06-01-201430,001001003000,00
TotalenØ 28,33-∑ 150∑ 4250,00

[ Voor 15% gewijzigd door Anoniem: 26306 op 11-01-2014 14:32 ]

Pagina: 1