[ dsivic @ 05.12.2011. 13:09 ] @
Zdravo,

malo sam zaglavio, imam tri tabele: users, activities,useractivities

users tabela:
id
user

activities tabela:
id
activity

useractivities tabela:
id
activity_id
user_id
activity_date
... i jos neke dodatne kolone


znaci user moze imati vise aktivnosti...
treba mi lista korisnika koji nisu imali aktivnosti u zadnja tri mjeseca, kako??


[ djoka_l @ 05.12.2011. 13:20 ] @
Prvo nađeš koji su bili aktivni u poslednja tri meseca:

Code (sql):

SELECT DISTINCT user_id
FROM useractivities
WHERE activity_date >= date_sub( curdate(), INTERVAL 3 months)
 


a onda oduzmeš od svih usera one koji su bili aktivni

Code (sql):

SELECT id
FROM users
MINUS
SELECT DISTINCT user_id
FROM useractivities
WHERE activity_date >= date_sub( curdate(), INTERVAL 3 months)
 
[ dsivic @ 05.12.2011. 13:28 ] @
znaci ipak se ne može riješiti jednim upitom?
[ djoka_l @ 05.12.2011. 13:36 ] @
Pa to i jeste jedan upit, samo sam ga uradio postupno, da bi razumeo.

Onaj drugi upit ti rešava stvar.

SELECT id
FROM users
MINUS
SELECT DISTINCT user_id
FROM useractivities
WHERE activity_date >= date_sub( curdate(), interval 3 months)

Naravno, može i na druge načine, ali mi ovaj deluje razumljivo za početnika...
[ bantu @ 05.12.2011. 13:49 ] @
A može i ovako:
Code:
SELECT u.id
FROM users u left outer join useractivities ua on (u.id=ua.user_id)
WHERE ua.activity_date >= date_sub( curdate(), interval 3 months) and ua.user_id is null;
[ dsivic @ 05.12.2011. 13:58 ] @
nije mi jasno kako dobiti u jednom query-u one koji nisu bili aktivni u zadnja tri mjeseca, sorry
[ dsivic @ 05.12.2011. 14:44 ] @
skonto sam, moze sa sub-selectom u WHERE dijelu sa user_id NOT IN (SELECT ....WHERE activity_date >= date_sub( curdate(), interval 3 months)),

JEL OK?