Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> sprzedaż ograniczona datami
mihmih
post 11.12.2017, 15:55:18
Post #1





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

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


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?
Go to the top of the page
+Quote Post
nospor
post 11.12.2017, 15:59:23
Post #2





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




select sum.... from tabele group by miesiac


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 11.12.2017, 16:11:17
Post #3





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Jedno jakby drugiemu przeczyło.
Może chodzi Ci o coś takiego? https://dev.mysql.com/doc/refman/5.7/en/gro...-modifiers.html


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 11.12.2017, 16:18:39
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


raczej

SELECT SUM() FROM orders WHERE YEAR(`date`) = 2017 AND MONTH(`date`) = 1;
Go to the top of the page
+Quote Post
phpion
post 11.12.2017, 19:24:40
Post #5





Grupa: Moderatorzy
Postów: 6 070
Pomógł: 860
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post
trueblue
post 11.12.2017, 19:37:35
Post #6





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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


--------------------
Go to the top of the page
+Quote Post
mihmih
post 11.12.2017, 19:53:45
Post #7





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

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


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.
Go to the top of the page
+Quote Post
trueblue
post 11.12.2017, 20:10:41
Post #8





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


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.

Ten post edytował trueblue 11.12.2017, 20:14:26


--------------------
Go to the top of the page
+Quote Post
mihmih
post 11.12.2017, 20:35:20
Post #9





Grupa: Zarejestrowani
Postów: 125
Pomógł: 1
Dołączył: 4.06.2015

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


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
Go to the top of the page
+Quote Post
trueblue
post 11.12.2017, 20:47:26
Post #10





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Byłaby bardziej uniwersalna gdybym był jasnowidzem.

Zrób tak jak piszesz, aby wystartować od aktualnego miesiąca. Ale nie CURRENT_DATE.


--------------------
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: 28.03.2024 - 11:05