Sql non è il mio forte...

in un'applicazione in protetta da area riservata, ho una tabella in cui memorizzo data e ora in cui ogni utente apre una determinata pagina. Devo estrarre dei dati ma non riesco a scrivere la query.

Nella tabella "accessi" ogni riga rappresenta l'apertura di una pagina da parte di un utente, memorizzo quindi l'id utente, is_sessione, data, ora e pagina aperta.

Sto cercando di estrarre quali utenti, in un dato intervallo di tempo ( e questo non è un problema, ciorva si ma fino ad un certo punto ), all'interno della stessa sessione di navigazione, sono passati da una pagina determinata ad un'altra determinata...
io ho scritto una roba tipo:

Codice PHP:
SELECT *
FROM accessi AS a1
JOIN accessi 
AS a2 ON a1.sessione_id a2.sessione_id

WHERE a1
.a_data>'valore'
AND a1.pagina='pagina_di_provenienza'
AND a2.pagina='pagina_di_destinazione'
AND a2.id>a1.id 
Il problema è che:
1. se all'interno della stessa sessione di lavoro un utente ha aperto più volte la pagina di destinazione DOPO la prima apertura di quella di provenienza la query mi tira fuori tutte righe inutili
2. gli accessi non sono sequenziali, non posso fare una clausola tipo a2.id=a1.id+1, perchè non è detto che nel frattempo ci sia stato un'altro utente che abbia aperto qualcos'altro

che dite? C'è una soluzione al problema?