Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Jak wykonac?
Forum PHP.pl > Forum > Bazy danych
Ace
Witam.

Mam pewien problem z wyciagnienciem informacji z bazy danych. Jaki jest problem...
Wyobrazmy sobie hotel, w hotelu mieszkaja sobie ludzie. Chodzi mi o stworzenie pewnych statystyk na podstawie informacji:

baza danych MySQL
tabela:
id|data_od|data_do|imie|nazwisko...

mamy dane np:
1|2005-05-10|2005-05-15|A|A
2|2005-05-13|2005-06-20|B|B
3|2005-05-14|2005-07-21|C|C

Chce wyciagnac np: srednia liczbe osob w podanym przedziale czasowym - w sumie nic trudnego, ale:
Potrzebuje wyciagnac statystyki srednie z danego okresu liczone z jakiesgos innego przedzialu - juz tlumacze o co chodzi
np: chcemy wyciagnac dane sobie z calego roku 2005:
musze otrzymac w wyniku, miesiac styczen = 0, luty =0, marzec=0, kwiecien=0... maj=3 - 3 bo 3 osoby byly, czerwiec = 2 bo 2 osoby byly B i C, Lipiec = 1 (tylko C) etc...

rownie dobrez chce byc w stanie ustawic sobie okres np: 2005-05 - 2005-06 z intervalem tygodniowym (co 7 dni) czyli
1 - 2005-05-01 do 2005-05-07 = 0
2 - 2005-05-08 do 2005-05-15 = 3
3 - 2005-05-16 do ...

W chwili obecnej zrealizowalem to w php, lecz jest to zrobione na szybko i jest to rozwiazanie dosyc powolne.

Moje pytanie: Czy jest mozliwosc zrealizowac takie dzialanie po stronie bazy danych SQL. Jesli w MySQL nie mozna, to pytanie czy w np: PostgreSQL da sie?

Pozdrawiam.
Łukasz Bobiński
Sh4dow
  1. SELECT *
  2. FROM test WHERE data_od < '2005-05-15' AND data_do > '2005-05-08'

albo jakos tak moze to rozwiazac. oczywiscie mozna dac count(id) zeby otrzymac liczbe
Ace
Hm...

Cos podobnego probowalem ale to zlicza ilosc wystapien w danym przedziale. A ja potrzebuje nadac przedzial jeden z ktorego zbiera rekordy, a pozniej interval zliczania np miesiac.l
Ustawiamy sobie np: przedzial zbierania rekordow 2005-05-01 - 2005-07-31 interval miesiac, i na wyniku mamy otrzymac

2005-05 - liczba z tego miesiaca
2005-06 - liczba z tego miesiaca
2005-07 - liczba z tego miesiaca

Bardziej mi chodzi o to jak wykonac warunek ktory to wykona, chyba chodzi o grupowanie. Pogrupowac na miesiace potrafie, ale jak np: pogrupowac wzgledem 1 dnia, badz 7 dni czy 2 tygodni?

EDIT: wzgledem 1 dnia tez potrafie, ale jak grupowac wzgledem 1 tygodnia czy 2 tygodni.
Sh4dow
sorki ze tak pozno ale zadanie okazalo sieprostrze niz wyglada.
  1. SELECT DATE_FORMAT( data_od, '%X-%j' ) AS DATA , COUNT( id ) AS ilosc
  2. FROM test WHERE data_od < '2005-08-15' AND data_do > '2005-05-08'
  3. GROUP BY `data`

Jesli chodzi o DATE_FORMAT to zapraszam do manuala MySQL date and time functions
Teraz pokazuje ilosc osob w danym dniu w roku. Jesli dni nie ma to znaczy ze jest zero. Nie wiem jak zmusic mysql zeby zera pokazywal. Przesledzic czy dobrze dziala bo nie mam czasu na testy
Ace
Dziekuje smile.gif

A jesli zamiast pola typu date bylo by pole int z liczba sekund od 1970.01.01, to mozna uzyc FROM_UNIXTIME winksmiley.jpg
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.