none
Filtrar campo correto RRS feed

  • Pergunta

  • Ola pessoal

    Preciso de uma ajuda:

    No comando abaixo estou tentando pegar o maior Registro, neste caso o campo PK_Diligencia, porém mesmo assim esta trazendo duplicado, se alguem puder me dar uma dica no comando:

    set dateformat dmy

    SELECT     distinct  dbo.tblWTDRegistros.PK_Registro AS Registro, dbo.tblWTDProtocolos.PK_Protocolo AS Protocolo, CONVERT(char(10),

                          dbo.tblWTDDiligencias.DataDaDigitacao, 103) AS Data_Pagamento, MAX(CONVERT(char(10), dbo.tblWTDDiligencias.DataDaSituacao, 103)) AS Data_Diligencia,

                          dbo.tblWTDSituacoes.Descricao as Descrição, dbo.tblWTDProtocolos.VlrLocalidades AS Valor_Localidade, MAX (PK_Diligencia) as Diligencia

    FROM         dbo.tblWTDDiligencias INNER JOIN

                          dbo.tblWTDRegistros ON dbo.tblWTDRegistros.PK_Registro = dbo.tblWTDDiligencias.FK_TblWTDRegistrosPK_Registro INNER JOIN

                          dbo.tblWTDProtocolos ON dbo.tblWTDProtocolos.PK_Protocolo = dbo.tblWTDRegistros.FK_tblWTDProtocolosPK_Protocolo INNER JOIN

                          dbo.tblWTDNomesProtocolos ON dbo.tblWTDNomesProtocolos.FK_tblWTDProtocolosPK_Protocolo = dbo.tblWTDProtocolos.PK_Protocolo INNER JOIN

                          dbo.tblWTDSituacoes ON dbo.tblWTDSituacoes.PK_Situacao = dbo.tblWTDDiligencias.FK_tblWTDSituacoesPK_Situacao

                                       inner join tblWTDCertificados on tblWTDCertificados.FK_TblWTDRegistrosPK_Registro = tblWTDDiligencias.FK_TblWTDRegistrosPK_Registro

    WHERE     (dbo.tblWTDDiligencias.DataDaDigitacao > = CONVERT(CHAR(10), GETDATE()-7, 103))

     AND (dbo.tblWTDNomesProtocolos.FK_tblWTDQualidadesPK_Qualidade = 28)

    and  (dbo.tblWTDSituacoes.TipoDaSituacao IN ('N', 'P'))

    and tblWTDProtocolos.FK_tblWTDGruposPK_Grupo = 1

    GROUP BY dbo.tblWTDRegistros.PK_Registro, dbo.tblWTDDiligencias.DataDaDigitacao, dbo.tblWTDProtocolos.VlrLocalidades, dbo.tblWTDNomesProtocolos.Nome,

                          dbo.tblWTDProtocolos.PK_Protocolo, dbo.tblWTDSituacoes.Descricao

    ORDER BY Data_Pagamento asc

    195700  136108  04/03/2019         06/03/2019         POSITIVA            79.59     86902

    195722  136130  04/03/2019         06/03/2019         POSITIVA            79.59     86919

    195772  136180  04/03/2019         06/03/2019         NEGATIVA          79.59     86933

    195773  136181  04/03/2019         06/03/2019         NEGATIVA          79.59     86935

    195773  136181  04/03/2019         06/03/2019         POSITIVA            79.59     86934

    195785  136193  04/03/2019         06/03/2019         NEGATIVA          79.59     86944

    195785  136193  04/03/2019         06/03/2019         POSITIVA            79.59     86943

    195794  136202  04/03/2019         06/03/2019         POSITIVA            79.59     86961

    195796  136204  04/03/2019         06/03/2019         NEGATIVA          79.59     86965

    195796  136204  04/03/2019         06/03/2019         POSITIVA            79.59     86964

    segunda-feira, 11 de março de 2019 18:03

Respostas

  • Boa noite,

    Tiago, experimente fazer uns testes dessa forma para ver se é obtido o resultado esperado:

    declare @DataIni date;
    set @DataIni = GETDATE() - 7;
    
    with CTE_RN as
    (
        SELECT
            dbo.tblWTDRegistros.PK_Registro AS Registro, 
            dbo.tblWTDProtocolos.PK_Protocolo AS Protocolo, 
            CONVERT(char(10), dbo.tblWTDDiligencias.DataDaDigitacao, 103) AS Data_Pagamento, 
            CONVERT(char(10), dbo.tblWTDDiligencias.DataDaSituacao, 103) AS Data_Diligencia,
            dbo.tblWTDSituacoes.Descricao as Descrição, 
            dbo.tblWTDProtocolos.VlrLocalidades AS Valor_Localidade, 
            PK_Diligencia as Diligencia,
            ROW_NUMBER() OVER
                (PARTITION BY dbo.tblWTDRegistros.PK_Registro, dbo.tblWTDProtocolos.PK_Protocolo
                 ORDER BY PK_Diligencia DESC) as RN 
        FROM dbo.tblWTDDiligencias 
        INNER JOIN dbo.tblWTDRegistros 
            ON dbo.tblWTDRegistros.PK_Registro = dbo.tblWTDDiligencias.FK_TblWTDRegistrosPK_Registro 
        INNER JOIN dbo.tblWTDProtocolos 
            ON dbo.tblWTDProtocolos.PK_Protocolo = dbo.tblWTDRegistros.FK_tblWTDProtocolosPK_Protocolo 
        INNER JOIN dbo.tblWTDNomesProtocolos 
            ON dbo.tblWTDNomesProtocolos.FK_tblWTDProtocolosPK_Protocolo = dbo.tblWTDProtocolos.PK_Protocolo 
        INNER JOIN dbo.tblWTDSituacoes 
            ON dbo.tblWTDSituacoes.PK_Situacao = dbo.tblWTDDiligencias.FK_tblWTDSituacoesPK_Situacao
        inner join tblWTDCertificados 
            on tblWTDCertificados.FK_TblWTDRegistrosPK_Registro = tblWTDDiligencias.FK_TblWTDRegistrosPK_Registro
        WHERE
            dbo.tblWTDDiligencias.DataDaDigitacao >= @DataIni AND 
            dbo.tblWTDNomesProtocolos.FK_tblWTDQualidadesPK_Qualidade = 28 and  
            dbo.tblWTDSituacoes.TipoDaSituacao IN ('N', 'P') and 
            tblWTDProtocolos.FK_tblWTDGruposPK_Grupo = 1
    )
    
    select * 
    from CTE_RN
    where
        RN = 1
    ORDER BY 
        Data_Pagamento asc
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Tiago_Aurelio terça-feira, 12 de março de 2019 11:15
    terça-feira, 12 de março de 2019 00:03

Todas as Respostas

  • Tiago,

    Sim, a questão de trazer duplicado não esta se relacionando as status de Positiva e Negativa?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 11 de março de 2019 22:38
  • Boa noite,

    Tiago, experimente fazer uns testes dessa forma para ver se é obtido o resultado esperado:

    declare @DataIni date;
    set @DataIni = GETDATE() - 7;
    
    with CTE_RN as
    (
        SELECT
            dbo.tblWTDRegistros.PK_Registro AS Registro, 
            dbo.tblWTDProtocolos.PK_Protocolo AS Protocolo, 
            CONVERT(char(10), dbo.tblWTDDiligencias.DataDaDigitacao, 103) AS Data_Pagamento, 
            CONVERT(char(10), dbo.tblWTDDiligencias.DataDaSituacao, 103) AS Data_Diligencia,
            dbo.tblWTDSituacoes.Descricao as Descrição, 
            dbo.tblWTDProtocolos.VlrLocalidades AS Valor_Localidade, 
            PK_Diligencia as Diligencia,
            ROW_NUMBER() OVER
                (PARTITION BY dbo.tblWTDRegistros.PK_Registro, dbo.tblWTDProtocolos.PK_Protocolo
                 ORDER BY PK_Diligencia DESC) as RN 
        FROM dbo.tblWTDDiligencias 
        INNER JOIN dbo.tblWTDRegistros 
            ON dbo.tblWTDRegistros.PK_Registro = dbo.tblWTDDiligencias.FK_TblWTDRegistrosPK_Registro 
        INNER JOIN dbo.tblWTDProtocolos 
            ON dbo.tblWTDProtocolos.PK_Protocolo = dbo.tblWTDRegistros.FK_tblWTDProtocolosPK_Protocolo 
        INNER JOIN dbo.tblWTDNomesProtocolos 
            ON dbo.tblWTDNomesProtocolos.FK_tblWTDProtocolosPK_Protocolo = dbo.tblWTDProtocolos.PK_Protocolo 
        INNER JOIN dbo.tblWTDSituacoes 
            ON dbo.tblWTDSituacoes.PK_Situacao = dbo.tblWTDDiligencias.FK_tblWTDSituacoesPK_Situacao
        inner join tblWTDCertificados 
            on tblWTDCertificados.FK_TblWTDRegistrosPK_Registro = tblWTDDiligencias.FK_TblWTDRegistrosPK_Registro
        WHERE
            dbo.tblWTDDiligencias.DataDaDigitacao >= @DataIni AND 
            dbo.tblWTDNomesProtocolos.FK_tblWTDQualidadesPK_Qualidade = 28 and  
            dbo.tblWTDSituacoes.TipoDaSituacao IN ('N', 'P') and 
            tblWTDProtocolos.FK_tblWTDGruposPK_Grupo = 1
    )
    
    select * 
    from CTE_RN
    where
        RN = 1
    ORDER BY 
        Data_Pagamento asc
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta Tiago_Aurelio terça-feira, 12 de março de 2019 11:15
    terça-feira, 12 de março de 2019 00:03
  • Na mosca hein mano...

    Muito obrigado MAIS UMA VEZ.. voce é o cara mano

    obrigado

    terça-feira, 12 de março de 2019 11:11