Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dane z poprzedniego miesiąca
Forum PHP.pl > Forum > Bazy danych
Spirit86
Witam, nie mogę coś wpaść na poymsł, jak pobrać dane z poprzedniego miesiąca, piszę coś na wzór:
  1. SELECT count( id ) AS `ile`, date
  2. FROM oo WHERE MONTH(`date`)<NOW()

Niestety, nie jest to poprawna składnia :|.
mhs
może coś takiego?

  1. SELECT COUNT(*) AS ile
  2. FROM oo WHERE MONTH(date) = (MONTH(NOW()) - 1)
Spirit86
niestety nie dizała :|
Spokojnie, nie wszyscy na raz, staarczy mniejsca dla Wszystkich :]
mhs
to moze w takim badz razie napisalbys jaka masz strukture bazy danych, jakie wysylasz zapytanie w koncu jaki blad sie zglasza a nie czepial sie ze nikt nie odpowiada?!
SongoQ
Zastosuj funkcje interval
Spirit86
@SongoQ: nie mam za bardzo pomysłu na wykorzystanie Twojej metody, mam wypisywać każdy miesiac osobno?

struktura wygląda tak:
nazwa - typ
id - int
date - date
(...)
po prostu nie zwraca mi wyników po zapytaniu SQL, a na pewno powinnien podać mi kilka.
Struktura skryptu itp. sa na pewno dobrze
behemot
a może coś takiego będzie działać (psql):
  1. SELECT *
  2. FROM tabela WHERE extract(month
  3. FROM DATA) = extract (month
  4. FROM current_timestamp::date - interval '1 month');


Pisane z palce ale chyba cos w tym stylu.

Pozdrawiam,
Kuba
SongoQ
@Spirit86 Mozesz uzyc przedzialu dat.
mhs
Witaj!

Mój podany wcześniej przykład był bliski temu co chciałeś osiągnąć i w przypadku prawidłowego jego zastosowania na pewno zwróciłby Ci wartości (chyba - nie sprawdzałem - byłyby kłopoty na przełomie roku). W związku z tym w tej chwili ze swojej strony proponuję drugie rozwiązanie.

  1. DROP TABLE IF EXISTS test;
  2.  
  3. CREATE TABLE test (
  4. id int UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  5. DATA date
  6. );
  7.  
  8. INSERT
  9. INTO test (DATA) VALUES
  10. ("2005-01-01"),
  11. ("2005-01-02"),
  12. ("2005-01-03"),
  13. ("2005-02-01"),
  14. ("2005-02-02"),
  15. ("2005-02-03"),
  16. ("2005-02-04"),
  17. ("2005-02-05"),
  18. ("2005-03-01"),
  19. ("2005-03-02");



  1. SELECT COUNT(*)
  2. FROM TEST WHERE MONTH(DATA) = MONTH(DATE_ADD(CURDATE(), INTERVAL - 1 MONTH));



PS. Ja nie sprawdzałem dokładnie tego podanego przykładu (nie chciało mi się sprawdzać dla większej ilości przypadków, jednak jak następnym razem napiszesz, że coś Ci nie działa to wcześniej zapoznać się z funkcjami użytymi w powyższym zapytaniu a na pewno przy odrobinie dobrej woli uda Ci się znaleźć rozwiązanie.
No1B
zakladajac ze miesiacem nie jest styczen w mssql zadziala cosik takiego
  1. SELECT count(id) AS 'ile', date
  2. FROM oo WHERE year(date) = year(getdate()) AND month(date) = month(getdate())-1
  3. GROUP BY date


count jest funkcja agregujaca i wyniki trzeba w mssql'u grupowac.
dla stycznia trzba napisac case'a ale niestety nie mam teraz zadnej bazy przy sobie
i nie mam jak sprawdzic skryptu.
mam nadzieje ze cosik pomoge.

Pozdrawiam
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.