Como fazer LEFT JOIN pegando o ultimo registro de data

Filial Destino (RE_FILIALP): serão gerados dados apenas para colaboradores, que atendam a situação de Transferidos. Deverá posicionar no ultimo registro da matricula (considerar RA_FILIAL + RA_MAT, posicionando na RE_FILIAL + RE_MATD), para determinar qual é o ultimo registro validar a data mais próxima a data informada no parâmetro desse relatório "Data até", considerando campo "Dt Transfer" (RE_DATA).


FROM 
    SRA010 RA
    LEFT JOIN SR8010 R8 ON R8_FILIAL = RA_FILIAL AND R8_MAT = RA_MAT AND R8.D_E_L_E_T_ = '' AND GETDATE() BETWEEN R8_DATAINI AND R8_DATAFIM
    --LEFT JOIN SRE010 RE ON RA_FILIAL = RE_FILIALP AND RE_MATD = RA_MAT AND RE.D_E_L_E_T_ = '' AND GETDATE() BETWEEN RE_DATA and RE_DATA
    LEFT JOIN SRE010 RE ON RE_FILIALP = RA_FILIAL AND RE_MATD = RA_MAT AND RE.D_E_L_E_T_ = ' ' AND MAX(RE.RE_DATA) BETWEEN 'cDataIni' AND 'cDataFim' AND GETDATE() = '' 
    --LEFT JOIN SRE010 RE ON RA_FILIAL = RE_FILIALP AND RE_MATD = RA_MAT AND RE.D_E_L_E_T_ = '' AND RA_SITFOLH = 'Transferido' AND RE_DATA <= GETDATE()

Lá no começo do script, colocaria assim : SELECT TOP 1 DESC Assim ele vai trazer somente um dado , de forma decrescente, o resto dos filtros você faz dentro do where.

Olá Agnes, segue exemplo de query na SRA com a função Row_number, basta adaptar a sua necessidade. Esse exemplo vai trazer somente o ultimo registro


SELECT TOP 1 * FROM (
select ROW_NUMBER() over(ORDER BY RA_MAT) As LINHA,* 
from SRA010 SRA
) QUERY
ORDER BY LINHA DESC

Adicionando também que para a sua necessidade, estes campos devem já conter índica no banco de dados. Se algum dia precisar um join assim para campos que não são muito utilizados ou precisar de uma chave composta (fazer um where pere 2 campos, por exemplo), crie um índice no seu banco de dados para facilitar. Os bancos em si tem suas particularidades, mas, a sintaxe é bem parecida um com o outro.