Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sprzedaż ograniczona datami
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
Witam,

chciałbym otrzymać podsumowanie sprzedaży na każdy koniec miesiąca. Ale nie chodzi o podział na miesiące, tylko suma sprzedaży od początku do końca stycznia, od początku do końca lutego, od początku do końca marca itd. Nie mogę sobie z tym problemem poradzić, a pewnie rozwiązanie jest proste...ktoś może ma jakieś pomysły?
nospor
select sum.... from tabele group by miesiac
trueblue
Jedno jakby drugiemu przeczyło.
Może chodzi Ci o coś takiego? https://dev.mysql.com/doc/refman/5.7/en/gro...-modifiers.html
Pyton_000
raczej

SELECT SUM() FROM orders WHERE YEAR(`date`) = 2017 AND MONTH(`date`) = 1;
phpion
Sadze, ze tu chodzi o liczenie sprzedaży narastająco typu w styczniu sprzedaż wynosiła 10, w lutym 5 wiec na koniec lutego sprzedaż łączna wynosi 15. Najprościej wiec pogrupować dane po miesiącu i już poza baza policzyć odpowiednie sumy.
trueblue
phpion masz rację.


  1. SELECT miesiace.miesiac, SUM(t.wartosc)
  2. FROM tabela AS t,(SELECT LAST_DAY(DATE_FORMAT(DATA,'%Y-%m-01')) AS miesiac FROM tabela GROUP BY miesiac) AS miesiace
  3. WHERE t.data<=miesiace.miesiac
  4. GROUP BY miesiace.miesiac
mihmih
Właśnie o takie coś mi chodziło...jutro sprawdzę pomysł na bardziej rozbudowanym przykładzie. Dzięki.

Nie rozumiem jedynie dlaczego jest tam jedynka w zapisie: DATE_FORMAT(DATA,'%Y-%m-01')?

I czy można bez jakiejś dodatkowej tabeli uzyskać ostatnie 12 ostatnich dni miesiąca? Czyli 30.11.2017, 31.10.2017 itd.
trueblue
Możesz uprościć podzapytanie.
Ja niepotrzebnie sprowadziłem wszystkie daty do pierwszego dnia miesiąca (stąd ta jedynka).

  1. SELECT LAST_DAY(DATA) AS miesiac FROM tabela GROUP BY miesiac


Nie bardzo rozumiem. Ostatnich 12 dni miesiąca? Masz może na myśli ostatnie dni każdego z dwunastu miesięcy roku.

Można je uzyskać w ten sposób:

  1. SELECT DATE_SUB(DATE_ADD('2017-01-01', INTERVAL miesiace.miesiac MONTH), INTERVAL 1 DAY)
  2. FROM(
  3. SELECT 1 AS miesiac UNION
  4. SELECT 2 UNION
  5. SELECT 3 UNION
  6. SELECT 4 UNION
  7. SELECT 5 UNION
  8. SELECT 6 UNION
  9. SELECT 7 UNION
  10. SELECT 8 UNION
  11. SELECT 9 UNION
  12. SELECT 10 UNION
  13. SELECT 11 UNION
  14. SELECT 12) AS miesiace


P.S. Zmień UNION na UNION ALL
P.P.S. To zapytanie możesz podstawić do wcześniejszego zapytania. Gdybyś chciał mieć raport za cały rok pomimo braku niektórych danych, to musisz spiąć tabelę źródłową z podzapytaniem poprzez LEFT JOIN.
mihmih
Mam na myśli ostatnie 12 ostatnich dni miesiąca. Czyli na dzień dzisiejszy che aby to było 30.11.17, 31.10.17, aż do 31.12.16

Twoja propozycja nie jest chyba uniwersalna, ponieważ za pół roku chciałbym otrzymać 31.05.18, 30.04.18, 31.03.18 itd. W to zapytanie musi być wmieszane CURRENT_DATE
trueblue
Byłaby bardziej uniwersalna gdybym był jasnowidzem.

Zrób tak jak piszesz, aby wystartować od aktualnego miesiąca. Ale nie CURRENT_DATE.
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-2025 Invision Power Services, Inc.