[MySQL] Proste pytanie z wyciągnięciem czasu, a jednak mnie zagieło.
sawic - 24-12-2006 00:36
[MySQL] Proste pytanie z wyciągnięciem czasu, a jednak mnie zagieło.
Witam. Mam tabelę:
user (char(20)) | data (timestamp) ---------------------------------- user1 | 2006-12-12 12:12:12 user2 | 2006-12-12 12:12:12 user3 | 2006-10-12 12:12:12 user1 | 2005-12-12 12:12:12 user5 | 2004-12-12 12:12:12 user2 | 1999-12-12 12:12:12 user6 | 2006-12-12 12:12:12
I chciałbym wyciągnać dla każdego użytkownika jego maksymalna datę. Powiedzmy, że jest to data ostatniej aktywności, i tych nie aktywnych od czasu dłuższego niż miesiąc chciałbym wytypować do skasowania. Czyli wynikiem tego zapytania powinno być: *user3* i *user5*
Robię zatem takie zapytanie: select user from db.table where max(data) + interval 1 month < now() group by user
I dostaję: #1111 - Invalid use of group function
No ok spróbujmy inaczej, robię zapytanie: select if(max(data) + interval 1 month < now(), 'skasowac', 'zostawic') as zadanie, user from db.table group by user
I wynikiem tego jest zostawic dla każdego user-a.
Natomiast zapytanie: select max(data), user from db.table group by user
daje mi: user (char(20)) | data (timestamp) ---------------------------------- user1 | 2006-12-12 12:12:12 user2 | 2006-12-12 12:12:12 user3 | 2006-10-12 12:12:12 user5 | 2004-12-12 12:12:12 user6 | 2006-12-12 12:12:12
Czyli to co powinno. Myślałem, że dodam if-a i będę miał jasną sytuację, jednak tak nie jest.
Wydawało się takie proste, a jednak nie mogę zrozumieć czemu nie działa.
Czy mógłby mi ktoś z tym pomóc ?
Pozdrawiam
Paweł Matejski - 24-12-2006 00:36
sawic wrote: > Witam. > Mam tabelę: > > user (char(20)) | data (timestamp) > ---------------------------------- > user1 | 2006-12-12 12:12:12 > user2 | 2006-12-12 12:12:12 > user3 | 2006-10-12 12:12:12 > user1 | 2005-12-12 12:12:12 > user5 | 2004-12-12 12:12:12 > user2 | 1999-12-12 12:12:12 > user6 | 2006-12-12 12:12:12 > > I chciałbym wyciągnać dla każdego użytkownika jego maksymalna datę. > Powiedzmy, że jest to data ostatniej aktywności, i tych nie aktywnych od > czasu dłuższego niż miesiąc chciałbym wytypować do skasowania. > Czyli wynikiem tego zapytania powinno być: *user3* i *user5* > > Robię zatem takie zapytanie: > select user from db.table where max(data) + interval 1 month < now() > group by user > > I dostaję: > #1111 - Invalid use of group function > > No ok spróbujmy inaczej, robię zapytanie: > select if(max(data) + interval 1 month < now(), 'skasowac', 'zostawic') > as zadanie, user from db.table group by user > > I wynikiem tego jest zostawic dla każdego user-a. > > Natomiast zapytanie: > select max(data), user from db.table group by user > > daje mi: > user (char(20)) | data (timestamp) > ---------------------------------- > user1 | 2006-12-12 12:12:12 > user2 | 2006-12-12 12:12:12 > user3 | 2006-10-12 12:12:12 > user5 | 2004-12-12 12:12:12 > user6 | 2006-12-12 12:12:12 > > Czyli to co powinno. Myślałem, że dodam if-a i będę miał jasną sytuację, > jednak tak nie jest.
No, już prawie dobrze, doczytaj jeszcze o having.
-- P.M.
sawic - 24-12-2006 00:36
Paweł Matejski napisał(a): > No, już prawie dobrze, doczytaj jeszcze o having.
Działa. Dzięki.
Pozdrawiam
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[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 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
zanotowane.pldoc.pisz.plpdf.pisz.pladwokat.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 |
|