Вот о чем подумать ... решение исключительно для версий MySQL до 8.0.
Это абсолютно зависит от контактных данных, последовательно предшествующих событиям.
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(ID SERIAL PRIMARY KEY
,attribute VARCHAR(12) NOT NULL
,value VARCHAR(12) NOT NULL
);
INSERT INTO my_table VALUES
(1,'FName','John'),
(2,'LName','Smith'),
(3,'Email','JSmith@gmail.com'),
(4,'event_0','Movies'),
(5,'event_1','Dinner'),
(6,'FName','Mike'),
(7,'LName','Jones');
SELECT MAX(CASE WHEN attribute = 'fname' THEN value END) fname
, MAX(CASE WHEN attribute = 'lname' THEN value END) lname
, MAX(CASE WHEN attribute = 'email' THEN value END) email
FROM
( SELECT CASE WHEN attribute = 'fname' THEN @entity := @entity+1 ELSE @entity:=@entity END entity
, attribute
, value
FROM my_table
, (SELECT @entity := 0) vars
ORDER
BY id
) x
GROUP
BY entity
HAVING MAX(attribute LIKE 'event_%' AND value = 'Movies') = 1;
+-------+-------+--------------+
| fname | lname | email |
+-------+-------+--------------+
| John | Smith | JSmith@gmail |
+-------+-------+--------------+