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
21.11.2005, 10:33:18
SELECT *
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
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
22.11.2005, 14:23:39
sorki ze tak pozno ale zadanie okazalo sieprostrze niz wyglada.
SELECT DATE_FORMAT( data_od, '%X-%j' ) AS DATA , COUNT( id ) AS ilosc
FROM test WHERE data_od < '2005-08-15' AND data_do > '2005-05-08'
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
Dziekuje

A jesli zamiast pola typu date bylo by pole int z liczba sekund od 1970.01.01, to mozna uzyc FROM_UNIXTIME