Usando a junção interna para determinar o intervalo entre registros específicos e eventos relacionados em uma tabela

Eu tenho uma tabela simples que é usada para registrar eventos contra visitas específicas:

Describe Histories;
    +------------------+
    | Field            |
    +------------------+
    | HistoryId        |
    | VisitId          |
    | Location         |
    | Event            |
    | EventTime        |
    +------------------+

Indivíduos estão associados a visitas (VisitId). Para cada visita, um indivíduo pode ter vários registros históricos. Eventos podem ser Admissão, Transferência ou Descarga.

Eu estou tentando escrever uma consulta para calcular a duração em cada local para cada indivíduo. Note que eles podem visitar um local várias vezes para cada visita. Um indivíduo entra em um local com um evento de admissão ou transferência e sai com uma descarga ou transferência.

Se um indivíduo entrar no Local 'A', o seu registro de Admissão ou Transferência listará o Local 'A', no entanto, se ele transferir sua transferência (ou baixa) listará outro Local, digamos 'B'.

Portanto, tenho que encontrar o intervalo entre a transferência para o Local 'A' e a transferência subseqüente (no tempo) para o Local 'B'. Transferências intra-locais não são avaliadas.

Eu entendo que a solução provavelmente será baseada em um INNER JOIN, no entanto eu estou em uma perda para entender como selecionar o registro de "saída" de transferência que corresponde à transferência mais recente "in".

Eu acho que isso é razoavelmente complexo - espero ter sido claro o suficiente na minha explicação.

Qualquer orientação muito apreciada.