Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mysql - sumowanie inne
Forum PHP.pl > Forum > Bazy danych > MySQL
fcppl
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
trueblue
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.
fcppl
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 ?
trueblue
  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;

fcppl
To rozwiązanie działa b.dobrze

Serdecznie dziękuję za pomoc.
StevDefs
Buy Generic Plavix In Us online pharmacy Risks Of Propecia Online Prescription Xenical Fat Blocker

Viagra Y Esteroides Dangers With Expired Cephalexin Discount isotretinoin viagra Buy Plavix

Buy Prescription Viagra Online Suche Viagra Ch Aleve cheapest cialis Northwestern Canada Drugs

Free Amoxicillin Canadian Health Mall priligy presentacion Viagra Kamagra Erfahrung Pastillas Cytotec Donde Las Venden Finasterid 5mg Rezeptfrei Kaufen

Discount Plavix Coupons Prednisolone Nextday buy cialis Order Orlistat Online
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.