ďťż
 
[MySQL] da się skonstruować takie zapytanie .. ? ďťż
 
[MySQL] da się skonstruować takie zapytanie .. ?
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[MySQL] da się skonstruować takie zapytanie .. ?



S.Lewandowski - 09-05-2006 23:55
[MySQL] da się skonstruować takie zapytanie .. ?
  Tabela:

id |user_id |dzien |wartosc
---------------------------------
1 | 20 |1 | 20
2 | 20 |2 |20
3 | 20 |3 | 20
4 | 20 |4 |20
5 | 20 |12 |50
6 | 20 |13 |50
7 | 20 |31 |20
8 | 125 |1 |45
9 | 125 |2 |45
10 | 125 |3 |45
11 | 125 |25 |45
12 | 125 |26 |45

chciałbym uzyskać wynik:

user_id | od | do | wartosc
-----------------------------------
20 | 1 | 4 | 20
20 | 12 | 13 | 50
20 | 31 | 31 | 20
125 | 1 | 3 | 45
125 | 25 | 26 | 45

Da się to zrobić zapytaniem, czy muszę z poziomu php to poukładać ?

Pozdrawiam.





Rafal sxat - 09-05-2006 23:55
=?iso-8859-2?Q?Re:_=5BMySQL=5D_da_si=EAskonstruowa=E6_takie_z apytanie_.?= =?iso-8859-2?Q?._=3F?=
  > 20 | 31 | 31 | 20
> 125 | 1 | 3 | 45
> 125 | 25 | 26 | 45
>
> Da się to zrobić zapytaniem, czy muszę z poziomu php to poukładać ?
>
> Pozdrawiam.
>
>
cos w rodzaju tego ale nie sprawdzalem:

select user_id, min(dzien),max(dzien), wartosc from tabelka group by
user_id,wartosc

pozdr
Rafal
(sxat)

--
Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych




S.Lewandowski - 11-05-2006 13:00

  > >
> cos w rodzaju tego ale nie sprawdzalem:
>
> select user_id, min(dzien),max(dzien), wartosc from tabelka group by
> user_id,wartosc
>

No prawie .. Działa pięknie pod warunkiem, że wartości w poszczególnych
okresach danego usera są różne. Gdy wartość jest taka sama zlicza cały
okres, nie uwzględniając przerw między dniami.

Pozdrawiam.




Rafal sxat - 11-05-2006 13:00
=?iso-8859-2?Q?Re:_=5BMySQL=5D_da_si=EAskonstruowa=E6_takie_z apytanie_.?= =?iso-8859-2?Q?._=3F?=
  > > select user_id, min(dzien),max(dzien), wartosc from tabelka group by
> > user_id,wartosc
> >
>
> No prawie .. Działa pięknie pod warunkiem, że wartości w poszczególnych
> okresach danego usera są różne. Gdy wartość jest taka sama zlicza cały
> okres, nie uwzględniając przerw między dniami.
>

mozesz to pokazac? ;)
bo moze wystaczy dac
IF (min(dzien)=max(dzien),xxx,yyy) AS mindzien etc...

pozdr
rafal
(sxat)

--
Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych





S.Lewandowski - 11-05-2006 13:00

  > > No prawie .. Działa pięknie pod warunkiem, że wartości w poszczególnych
> > okresach danego usera są różne. Gdy wartość jest taka sama zlicza cały
> > okres, nie uwzględniając przerw między dniami.
> >
>
> mozesz to pokazac? ;)
> bo moze wystaczy dac
> IF (min(dzien)=max(dzien),xxx,yyy) AS mindzien etc...
>

id | user_id | dzien | wartosc
--------------------------------
1 | 1 | 15 | 40
2 | 1 | 16 | 40
3 | 1 | 17 | 40
4 | 1 | 30 | 40

dla takich danych, zapytanie:
SELECT user_id, min( dzien ) as od , max( dzien ) as do, wartosc
FROM tabelka
GROUP BY user_id, wartosc

zwróci:
user_id | od | do | wartosc
------------------------------
1 | 15| 30 | 40

a mi chodzi o taki wynik:

user_id | od | do | wartosc
------------------------------
1 | 15| 17 | 40
1 | 30| 30 | 40

gdyby 'wartość' 30 dnia była <>40 wtedy by zadziałało ..

Pozdrawiam.




Rafalsxat - 11-05-2006 13:00
=?iso-8859-2?Q?Re:_=5BMySQL=5D_da_si=EAskonstruowa=E6_takie_z apytanie_.?= =?iso-8859-2?Q?._=3F?=
  >
> user_id | od | do | wartosc
> ------------------------------
> 1 | 15| 17 | 40
> 1 | 30| 30 | 40
>

to Ci powinno pomoc to zrobic- to ponizej dzialac bedzie dobrze tylko dla
jednego user_id przy wiekszej analizie (kilka osob) bedzie trzeba dodac
jeszcze kilka warunkow i tez powinno dzialac tyle ze predkosc zapytania
bedzie mizerna.

select user_id,min(dzien),max(dzien),wartosc from
(select if(@a!=dzien OR @a IS NULL,@a:=IF(@a=dzien-1,@a,dzien) ,@a=@a) AS a
,
dzien,
user_id,
wartosc from
(select * from tab order by user_id asc, dzien asc)
AS t) as t2
group by user_id,wartosc,a

pozdr
Rafal
(sxat)

--
Archiwum grupy: http://niusy.onet.pl/pl.comp.bazy-danych




S.Lewandowski - 11-05-2006 13:00

  > to Ci powinno pomoc to zrobic- to ponizej dzialac bedzie dobrze tylko dla
> jednego user_id przy wiekszej analizie (kilka osob) bedzie trzeba dodac
> jeszcze kilka warunkow i tez powinno dzialac tyle ze predkosc zapytania
> bedzie mizerna.
>
> select user_id,min(dzien),max(dzien),wartosc from
> (select if(@a!=dzien OR @a IS NULL,@a:=IF(@a=dzien-1,@a,dzien) ,@a=@a) AS
a
> ,
> dzien,
> user_id,
> wartosc from
> (select * from tab order by user_id asc, dzien
asc)
> AS t) as t2
> group by user_id,wartosc,a

Hm .. chyba jednak poskładam to spod php, bo to co pokazałem to tylko część
większego zapytania, wykonującego złożenia na kilku dosyć dużych tabelach,
więc chyba przefiltrowanie tego w php będzie szybciej działało.
W każdym razie dzięki za pomoc.

Pozdrawiam.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?= [mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?= [MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?= [mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= [MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?= Gdzie MySQL 4.1, a gdzie 5.0? [MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?= [MS SQL] "set names" (mySQL) w MS SQL MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • kfia-tek.keep.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com