Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Mysql - sumowanie inne
fcppl
post 3.10.2018, 08:11:45
Post #1





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 11.04.2010

Ostrzeżenie: (0%)
-----


Witam,

Mam tabele:

id data kwota waluta komentarz

1 | 2018-07-11 | 30 | PLN | AAA
2 | 2018-07-12 | 40 | PLN | BBB
3 | 2018-07-13 | 20 | PLN | CCC
4 | 2018-07-14 | 10 | PLN | DDD
5 | 2018-07-15 | 15 | PLN | EEE

Zapytaniem :

  1. SELECT t.id, t.DATA, t.kwota, t.waluta, t.komentarz, @running_total := @running_total + t.kwota AS stan_kasy FROM kasa t JOIN (SELECT @running_total := 0) r WHERE t.waluta="PLN" ORDER BY t.id ASC;


Otrzymuję:

id data kwota waluta komentarz | stan kasy

1 | 2018-07-11 | 30 | PLN | AAA | 30
2 | 2018-07-12 | 40 | PLN | BBB | 70
3 | 2018-07-13 | 20 | PLN | CCC | 90
4 | 2018-07-14 | 10 | PLN | DDD | 100
5 | 2018-07-15 | 15 | PLN | EEE | 115

Do tego momentu wszystko działa dobrze. Ale jak wybiorę zakres dat zaptaniem:

  1. SELECT t.id, t.DATA, t.kwota, t.waluta, t.komentarz, @running_total := @running_total + t.kwota AS stan_kasy FROM kasa t JOIN (SELECT @running_total := 0) r WHERE t.waluta='PLN' AND t.DATA BETWEEN '2018-07-13' AND '2018-07-14' ORDER BY t.id ASC;


Otrzymam wynik:

id data kwota waluta komentarz | stan kasy

3 | 2018-07-13 | 20 | PLN | CCC | 20
4 | 2018-07-14 | 10 | PLN | EEE | 30

A chciałem uzyskać cos takiego: Czyli pozycja ID 1, 2 laczy się razem i sumuje swoj wynik i jako ID 2, później jest ID 3 i 4.

2 | 2018-07-13 | 70 | PLN | xxx | 70
3 | 2018-07-13 | 20 | PLN | CCC | 90
4 | 2018-07-14 | 10 | PLN | EEE | 100

Ten post edytował fcppl 3.10.2018, 08:16:51
Go to the top of the page
+Quote Post
trueblue
post 3.10.2018, 09:00:49
Post #2





Grupa: Zarejestrowani
Postów: 5 438
Pomógł: 1489
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Może tak:

SELECT suma rekordów przed datą z początku zakresu, a wartość kolumny data ustawiona na sztywno jako data z początku zakresu
UNION ALL
SELECT rekordy z zakresu
UNION ALL
SELECT suma rekordów po dacie z końca zakresu, a wartość kolumny data ustawiona na sztywno jako data z końca zakresu (lub inaczej, nie określiłeś co z rekordami po dacie końca)

a cały powyższy UNION jako podzapytanie, na którym dopiero uruchamiasz running sum.


--------------------
Go to the top of the page
+Quote Post
fcppl
post 3.10.2018, 09:09:54
Post #3





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 11.04.2010

Ostrzeżenie: (0%)
-----


rekordy po dacie konca nie sa wazne, poprostu powinny byc anulowane/pominiete. Jezeli jest możliwośc mogę prosić o przykładowe zapytanie jak powinno wygladac według twoich wskazówek ?
Go to the top of the page
+Quote Post
trueblue
post 3.10.2018, 09:22:44
Post #4





Grupa: Zarejestrowani
Postów: 5 438
Pomógł: 1489
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. SELECT tmp.DATA, tmp.kwota, tmp.waluta, tmp.komentarz, @running_total := @running_total + tmp.kwota AS stan_kasy
  2. FROM(
  3. SELECT '2018-07-13' AS DATA, SUM(t.kwota) AS kwota, 'PLN' AS waluta,'' AS komentarz FROM kasa AS t WHERE t.data<'2018-07-13' AND t.waluta='PLN'
  4. UNION ALL
  5. SELECT t.DATA, t.kwota, t.waluta, t.komentarz FROM kasa AS t WHERE t.waluta='PLN' AND t.DATA BETWEEN '2018-07-13' AND '2018-07-14'
  6. ) AS tmp, (SELECT @running_total := 0) AS rs
  7. ORDER BY tmp.DATA;



--------------------
Go to the top of the page
+Quote Post
fcppl
post 3.10.2018, 10:22:28
Post #5





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 11.04.2010

Ostrzeżenie: (0%)
-----


To rozwiązanie działa b.dobrze

Serdecznie dziękuję za pomoc.

Ten post edytował fcppl 3.10.2018, 10:34:27
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.07.2019 - 04:53