none
Query - tirar os registros com uma das colunas duplicadas RRS feed

  • Pergunta

  • Olá pessoal...

    Estou com uma dúvida:

    Tenho uma tabela e preciso retornar todos os campos porém com a maior data de evidencia.

    Tenho essa tabela
    IdTurmaPQ DataAula Frequencia DtCadastro DtEvidencia
    11162 2011-08-01 00:00:00.000 Presente 2011-09-22 00:00:00.000 2011-09-01 11:08:53.407
    11162 2011-08-01 00:00:00.000 Justificada 2011-09-22 00:00:00.000 2011-09-22 10:14:02.750
    11162 2011-08-02 00:00:00.000 Presente 2011-09-21 00:00:00.000 2011-08-31 16:41:26.983
    11162 2011-08-03 00:00:00.000 Presente 2011-09-21 00:00:00.000 2011-08-31 16:42:30.983
    11162 2011-08-04 00:00:00.000 Presente 2011-09-22 00:00:00.000 2011-08-31 16:50:39.877
    11162 2011-08-05 00:00:00.000 Ausente 2011-09-22 00:00:00.000 2011-08-31 16:53:04.077
    11162 2011-08-05 00:00:00.000 Justificada 2011-09-22 00:00:00.000 2011-09-22 09:54:39.267
    11162 2011-08-08 00:00:00.000 Ausente 2011-08-31 00:00:00.000 NULL
    11162 2011-08-09 00:00:00.000 Ausente 2011-08-31 00:00:00.000 NULL
    11162 2011-08-10 00:00:00.000 Ausente 2011-08-31 00:00:00.000 NULL
    11162 2011-08-11 00:00:00.000 Presente 2011-09-22 00:00:00.000 2011-08-31 20:00:08.217
    11162 2011-08-12 00:00:00.000 Ausente 2011-08-31 00:00:00.000 NULL
    11162 2011-08-13 00:00:00.000 Ausente 2011-09-21 00:00:00.000 NULL
    11162 2011-08-14 00:00:00.000 Justificada 2011-09-22 00:00:00.000 NULL
    11162 2011-08-15 00:00:00.000 Justificada 2011-09-22 00:00:00.000 NULL



    Meu retorno tem que ser exatamente esse:
    IdTurmaPQ DataAula Frequencia DtCadastro DtEvidencia
    11162 2011-08-01 00:00:00.000 Justificada 2011-09-22 00:00:00.000 2011-09-22 10:14:02.750
    11162 2011-08-02 00:00:00.000 Presente 2011-09-21 00:00:00.000 2011-08-31 16:41:26.983
    11162 2011-08-03 00:00:00.000 Presente 2011-09-21 00:00:00.000 2011-08-31 16:42:30.983
    11162 2011-08-04 00:00:00.000 Presente 2011-09-22 00:00:00.000 2011-08-31 16:50:39.877
    11162 2011-08-05 00:00:00.000 Justificada 2011-09-22 00:00:00.000 2011-09-22 09:54:39.267
    11162 2011-08-08 00:00:00.000 Ausente 2011-08-31 00:00:00.000 NULL
    11162 2011-08-09 00:00:00.000 Ausente 2011-08-31 00:00:00.000 NULL
    11162 2011-08-10 00:00:00.000 Ausente 2011-08-31 00:00:00.000 NULL
    11162 2011-08-11 00:00:00.000 Presente 2011-09-22 00:00:00.000 2011-08-31 20:00:08.217
    11162 2011-08-12 00:00:00.000 Ausente 2011-08-31 00:00:00.000 NULL
    11162 2011-08-13 00:00:00.000 Ausente 2011-09-21 00:00:00.000 NULL
    11162 2011-08-14 00:00:00.000 Justificada 2011-09-22 00:00:00.000 NULL
    11162 2011-08-15 00:00:00.000 Justificada 2011-09-22 00:00:00.000 NULL


    Fiz um SELECT DISTINCT mas não funciona pelo fato das linhas não serem identicas...
    Já tentei fazer  um MAX mas não deu certo, pq não quero que retorne somente os de data maior, quero que retorne até mesmo os valores nulos.
    Já tentei com GROUP BY.... Já não sei mais como tentar...

    Desde já agradeço a ajuda...
    quinta-feira, 22 de setembro de 2011 23:16

Respostas

  • Boa noite,

     

    Experimente mais ou menos deta forma:

     

    select * from Tabela as t
    where 
        (t.DtEvidencia is null) or
        (t.DtEvidencia in 
             (select max(DtEvidencia) from Tabela
              where 
                  (IdTurmaPQ = t.IdTurmaPQ) and
                  (DataAula = t.DataAula)))
    

     

    Espero que seja útil.

     


    Assinatura: Salas comerciais em Guarulhos
    quinta-feira, 22 de setembro de 2011 23:40

Todas as Respostas