简体   繁体   中英

is it possible to use result of query in same query

For example I have this table events:

user_id event_type date_of_event
userA X 01-01-2000
userA Y 01-01-2005
userB X 01-01-2000
userB Y 01-01-2100

I want to select all users that have an event_type = X but no event_type Y in the next 2 years AFTER the date of event_type X . So in the table above that would be userA and userB

I know I can do this in 2 mysql queries but was just wondering if there is a way to do this in just 1 query

You can do it with a self-join.

SELECT DISTINCT a.user_id
FROM yourTable AS a
LEFT JOIN yourTable AS B 
    ON a.user_id = b.user_id AND b.date_of_event < DATE_ADD(a.date_of_event, INTERVAL 2 YEAR)
    AND b.event_type = 'Y'
WHERE a.event_type = 'X'
select t.user_id
      ,t.event_type
      ,t.date_of_event

from   t join t t2 on t.user_id = t2.user_id 
         and  t.event_type <> t2.event_type
where    t.event_type = 'x'
         and          (t2.date_of_event < t.date_of_event
         or   datediff(t2.date_of_event,  t.date_of_event) > 730)
       
user_id event_type date_of_event
userA X 2000-01-01
userB X 2000-01-01

Fiddle

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM