Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Jak pobrać rekordy od dnia X do dnia Y kolejnego miesiąca, Okres rozliczeniowy obejmujący dwa miesiące
q3d
post 22.09.2017, 08:14:44
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

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


Gdyby okres rozliczeniowy zaczynał się pierwszego, a kończył ostatniego dnia miesiąca, mógłbym pobrać rekordy następująco:

  1. SELECT id FROM history_offers WHERE YEAR(eventDate) = YEAR(CURRENT_DATE()) AND MONTH(eventDate) = MONTH(CURRENT_DATE())


jednak okres rozpoczyna się 17 dnia miesiąca, a kończy 18 dnia kolejnego miesiąca. Jak w takim przypadku pobrać rekordy tylko przy pomocy SQL?

Z wykorzystaniem PHP to przychodzi mi do głowy operacje na wartościach zwracanych przez date(), a następnie:

  1. SELECT id FROM history_offers WHERE eventDate BETWEEN 'od' AND 'do'
Go to the top of the page
+Quote Post
trueblue
post 22.09.2017, 08:58:26
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Możesz użyć BETWEEN lub >= oraz <=.

17. aktualnego miesiąca i 18. miesiąca następnego:
  1. CONCAT(DATE_FORMAT(CURDATE(),'%Y-%m-'),'17')
  2. CONCAT(DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL 1 MONTH),'%Y-%m-'),'18')


--------------------
Go to the top of the page
+Quote Post
q3d
post 18.10.2017, 08:56:29
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

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


Sprawa się skomplikowała o tyle, że okres rozliczeniowy trwa 30 dni czyli np. rozpoczyna się od:
2017-09-18 do 2017-10-17
2017-10-18 do 2017-11-16
2017-11-17 do 2017-12-16
itd.

W skrypcie chciałbym codziennie pobierać wydarzenia z aktualnego okresu rozliczeniowego czyli dla dnia dzisiejszego byłby to od 2017-10-18 do 2017-11-16 gdyż jest wprowadzony limit zdarzeń w okresie rozliczeniowym. Czy to możliwe wyłącznie przy pomocy SQL biorąc pod uwagę strukturę tabeli jaką przedstawiłem w pierwszy wpisie?
Ewentualnie proszę o jakieś sugestie bo na razie mam "mętlik" w kwestii tych okresów rozliczeniowych, a myślę, że to problem z którym często można się spotkać więc Wasza pomoc może mi sprawę rozmętlikować wink.gif
Go to the top of the page
+Quote Post
Pyton_000
post 18.10.2017, 09:37:24
Post #4





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

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


no to jaki probblem?
Robisz INTERVAL 30 DAYS
Go to the top of the page
+Quote Post
q3d
post 18.10.2017, 13:17:59
Post #5





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

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


Problem w tym że nie wiem jak w skrypcie skonstruować zapytanie które będzie pobierało dane w zakresie okresu rozliczeniowego gdy data rozpoczęcia okresu i zakończenia to może być za każdym razem inny dzień miesiąca. Stała jest tylko liczba dni (30) oraz data rozpoczęcia pierwszego okresu 2017-09-17
2017-10-18 do 2017-11-16 (drugi okres)
2017-11-17 do 2017-12-16 (trzeci okres)
...
Go to the top of the page
+Quote Post
trueblue
post 18.10.2017, 13:23:14
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


https://dev.mysql.com/doc/refman/5.5/en/dat...nction_date-add


--------------------
Go to the top of the page
+Quote Post
Xelah
post 19.10.2017, 14:05:07
Post #7





Grupa: Zarejestrowani
Postów: 139
Pomógł: 24
Dołączył: 12.05.2013
Skąd: Hamburg

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


Chyba nie do końca zrozumiałem o co Ci chodzi.

Kiedy rozpoczyna się pierwszy okres rozliczeniowy? 2017-09-17 czy 2017-09-18?
Jeśli 2017-09-17 i ta data to pierwszy dzień okresu rozliczeniowego a 2017-09-18 to drugi, to 30-sty dzień to 2017-10-16. Czyli drugi okres rozpoczyna się dzień po, czyli 2017-10-17 i trwa do 2017-11-15.

P1: 2017-09-17 do 2017-10-16
P2: 2017-10-17 do 2017-11-15
P3: 2017-11-16 do 2017-12-15

Tak to ma być?
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: 13.08.2025 - 22:19