none
Problemas com order by desc RRS feed

  • Pergunta

  • Olá pessoal,

    tenho uma query funcionava perfeitamente no SQL Server 2000 mas que no 2005 está funcionando corretamente.

     

    O resultado da query abaixo é 2007-08-01 00:00:00.000 e 2007-08-02 00:00:00.000, correto!

    SELECT TOP 2 * FROM (

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    UNION ALL

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    )X

     

    Quanto utilizo o TOP 1 sem o DESC, o resultado é 2007-08-01 00:00:00.000, correto!

    SELECT TOP 1 * FROM (

    SELECT TOP 2 * FROM (

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    UNION ALL

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    )X ) Y

    ORDER BY DATAEMISSAO

     

    Já quando utilizo o DESC, o resultado vem errado 2007-08-31 00:00:00.000!

    SELECT TOP 1 * FROM (

    SELECT TOP 2 * FROM (

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    UNION ALL

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    )X ) Y

    ORDER BY DATAEMISSAO DESC

     

    terça-feira, 14 de agosto de 2007 17:50

Respostas

  • Oi wfernanda

    tente fazer assim que vai funcionar

     

    Code Snippet

    SELECT TOP 1 * FROM (

    SELECT TOP 2 * FROM (

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    UNION ALL

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    )X

    ORDER BY DATAEMISSAO DESC

    ) Y

     

     

     

    pelo que eu vi.. não traz a data certo...pois vc faz o order by depois de um select sem order by..

     

    []s

    espero ter ajudado

    quinta-feira, 16 de agosto de 2007 02:45
  • Olá Ricardo,

     

    Exato, a falta do ORDER BY no TOP 2 gerou esse problema.

     

    Obrigada pela ajuda!

     

    segunda-feira, 20 de agosto de 2007 10:35

Todas as Respostas

  • Fernanda,

     

    1 - O mesmo select executado no SQL Server 2000 não apresenta o mesmo resultado quando executado no SQL Server 2005?

     

    2 - Você possui o mesmo banco de dados criado nas duas instâncias tanto na 2000 como também na 2005?

     

    3 - Este banco criado no 2005 esta utilizando qual nível de compatibilidade?

     

    terça-feira, 14 de agosto de 2007 18:11
  • Júnior,

     

    1- Exatamente, o resultado entre 2000 e 2005 estão divergentes

     

    2- Sim, tenho o mesmo banco, um no servidor 2000 e outro no servidor 2005

     

    3- O nível de compatibilidade está como 2000

     

    Grata...
    terça-feira, 14 de agosto de 2007 18:26
  • Oi wfernanda

    tente fazer assim que vai funcionar

     

    Code Snippet

    SELECT TOP 1 * FROM (

    SELECT TOP 2 * FROM (

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    UNION ALL

    SELECT DISTINCT DATAEMISSAO FROM TMOV WHERE CODCOLIGADA = 1 AND DATAEMISSAO >= '2007-08-01'

    )X

    ORDER BY DATAEMISSAO DESC

    ) Y

     

     

     

    pelo que eu vi.. não traz a data certo...pois vc faz o order by depois de um select sem order by..

     

    []s

    espero ter ajudado

    quinta-feira, 16 de agosto de 2007 02:45
  • Olá Ricardo,

     

    Exato, a falta do ORDER BY no TOP 2 gerou esse problema.

     

    Obrigada pela ajuda!

     

    segunda-feira, 20 de agosto de 2007 10:35