sql - problem z grupowaniem
redgda - 24-08-2007 00:00
sql - problem z grupowaniem
witam, moj problem: wyciagnac po 1 zdjeciu z kazdego dnia, takim ktore ma maksymalna liczbe wyswietlen
tabela zdj, pola: id, url, data, wyswietlen
probowalem tak: SELECT id, nazwa, date( data_wprow ) as dzien , wyswietlen, max( wyswietlen ) AS maks FROM zdj GROUP BY dzien ORDER BY data_wprow
jest po 1 zdjeciu z kazdego dnia ale nie zawsze to ktore ma max liczbe wyswietlen:
6575 nazwa1 2007-07-24 121 121 6596 nazwa2 2007-07-25 346 1052 6619 nazwa3 2007-07-27 1458 2004
Marcin - 24-08-2007 00:00
redgda pisze: > witam, moj problem: > wyciagnac po 1 zdjeciu z kazdego dnia, takim ktore ma maksymalna > liczbe wyswietlen > > tabela zdj, pola: > id, url, data, wyswietlen > > probowalem tak: > SELECT id, nazwa, date( data_wprow ) as dzien , wyswietlen, > max( wyswietlen ) AS maks > FROM zdj > GROUP BY dzien > ORDER BY data_wprow > > jest po 1 zdjeciu z kazdego dnia ale nie zawsze to ktore ma max liczbe > wyswietlen: > > 6575 nazwa1 2007-07-24 121 121 > 6596 nazwa2 2007-07-25 346 1052 > 6619 nazwa3 2007-07-27 1458 2004 >
1. Jaka baza?
2. To zapytanie, które napisałeś, działało?
3. Co chcesz otrzymać dla danego dnia, jeśli w tym dniu było kilka zdjęć o maksymalnej liczbie wyświetleń? Wszystkie zdjecia o tej liczbie wyświetleń, jedno z nich - wszystko jedno które, czy jedno ale np. o najmniejszym id?
redgda - 24-08-2007 00:00
> 1. Jaka baza? mysql 5.0
> 2. To zapytanie, które napisa e , dzia a o? dzialalo, ale nie tak jak chcialem
> 3. Co chcesz otrzyma dla danego dnia, je li w tym dniu by o kilka zdj > o maksymalnej liczbie wy wietle ? Wszystkie zdjecia o tej liczbie > wy wietle , jedno z nich - wszystko jedno które, czy jedno ale np. o > najmniejszym id?- Ukryj cytowany tekst -
znalazlem juz pomoc: http://forum.webhelp.pl/viewtopic.php?p=809996#809996
i rozwiazanie: SELECT id_zdj, date(data) as data_dzien, wyswietlen from zdj t1 where wyswietlen >0 and wyswietlen = ( select max(wyswietlen) from zdj t2 where data_dzien=date(t2.data) ) order by data_dzien desc
ale faktycznie nie zwrocilem uwagi na to ze moze byc pare zdjec ktore maja taka sama i zarazem maksymalna liczbe wyswietlen jezeli wiesz jak zmodyfikowac zeby bylo tylko 1 (dowolne) to prosze o pomoc
Marcin - 24-08-2007 00:00
redgda pisze: >> 1. Jaka baza? > mysql 5.0 > >> 2. To zapytanie, które napisa e , dzia a o? > dzialalo, ale nie tak jak chcialem > >> 3. Co chcesz otrzyma dla danego dnia, je li w tym dniu by o kilka zdj >> o maksymalnej liczbie wy wietle ? Wszystkie zdjecia o tej liczbie >> wy wietle , jedno z nich - wszystko jedno które, czy jedno ale np. o >> najmniejszym id?- Ukryj cytowany tekst - > > znalazlem juz pomoc: > http://forum.webhelp.pl/viewtopic.php?p=809996#809996 > > i rozwiazanie: > SELECT id_zdj, date(data) as data_dzien, wyswietlen > from zdj t1 > where wyswietlen >0 > and > wyswietlen = ( > select max(wyswietlen) > from zdj t2 > where data_dzien=date(t2.data) > ) > order by data_dzien desc > > ale faktycznie nie zwrocilem uwagi na to ze moze byc pare zdjec ktore > maja taka sama i zarazem maksymalna liczbe wyswietlen > jezeli wiesz jak zmodyfikowac zeby bylo tylko 1 (dowolne) to prosze o > pomoc >
Zrobię tak, żeby był jeden wiersz dla jednej daty - ten o najmniejszym id:
SELECT id_zdj , date(data) as data_dzien , wyswietlen FROM zdj WHERE id_zdj IN ( SELECT min(id_zdj) FROM zdj t1 WHERE wyswietlen > 0 AND wyswietlen = ( SELECT max(wyswietlen) FROM zdj t2 WHERE date(t1.data)=date(t2.data) ) GROUP BY date(t1.data), t1.wyswietlen ) ORDER BY data_dzien DESC
Napisane na szybko, więc pewnie można lepiej...
Marcin - 24-08-2007 00:00
redgda pisze: >> 1. Jaka baza? > mysql 5.0 > >> 2. To zapytanie, które napisa e , dzia a o? > dzialalo, ale nie tak jak chcialem > >> 3. Co chcesz otrzyma dla danego dnia, je li w tym dniu by o kilka zdj >> o maksymalnej liczbie wy wietle ? Wszystkie zdjecia o tej liczbie >> wy wietle , jedno z nich - wszystko jedno które, czy jedno ale np. o >> najmniejszym id?- Ukryj cytowany tekst - > > znalazlem juz pomoc: > http://forum.webhelp.pl/viewtopic.php?p=809996#809996 > > i rozwiazanie: > SELECT id_zdj, date(data) as data_dzien, wyswietlen > from zdj t1 > where wyswietlen >0 > and > wyswietlen = ( > select max(wyswietlen) > from zdj t2 > where data_dzien=date(t2.data) > ) > order by data_dzien desc > > ale faktycznie nie zwrocilem uwagi na to ze moze byc pare zdjec ktore > maja taka sama i zarazem maksymalna liczbe wyswietlen > jezeli wiesz jak zmodyfikowac zeby bylo tylko 1 (dowolne) to prosze o > pomoc >
A jeszcze mi przyszło do głowy coś takiego :
SELECT id_zdj , date(data) as data_dzien , wyswietlen FROM zdj t1 WHERE id_zdj = ( SELECT id_zdj FROM zdj t2 WHERE date(t1.data)=date(t2.data) ORDER BY wyswietlen DESC LIMIT 1 ) ORDER BY data_dzien DESC
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
jak to =?ISO-8859-2?Q?zrobi=E6=2E=2E=2E=3F_TSQL_sql_server?==?ISO-8859-2?Q?_?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
Jak =?windows-1250?Q?pobra=E6_szacowan=B9_wielko=9C=E6_zbiory_wy nikowego_w_MS?==?windows-1250?Q?_SQL_2005=3F?=
=?iso-8859-2?Q?=5BMS_SQL=5D_Czy_mo=BFna_wywo=B3a=E6_funkcje_t ylko_raz_dla?==?iso-8859-2?Q?_ca=B3ego_zbioru_=BCr=F3d=B3owego=3F?=
[MSSQL] =?ISO-8859-2?Q?zgodno=B6ci_z_licencjami_Microsoft_?==?ISO-8859-2?Q?SQL_Server?=
=?ISO-8859-2?Q?k=B3opot_z_uruchomieniem_MY_SQL_dla_C?==?ISO-8859-2?Q?MS_i_CRM_na_Fedora_Core_3?=
Oracle PL/SQL Wstawianie =?ISO-8859-2?Q?wynik=F3w_kolekcji_d?==?ISO-8859-2?Q?o_tabeli?=
[MSSQL] ACCESS - SQL =?ISO-8859-2?Q?B=B3ad_w_konwersji_lic?==?ISO-8859-2?Q?zb?=
=?iso-8859-2?Q?=5Bmssql=5D_Zapytania_rekurencyjne__-_czy_sk=B3adnia_sql?==?iso-8859-2?Q?_co=B6_takiego_przewiduje_=3F?=
[Oracle PL/SQL] Cursor i zapis =?ISO-8859-2?Q?rekord=F3w_do_?==?ISO-8859-2?Q?kolejnych_plik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.plquentinho.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|