Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Pensa

Como fazer Distinct de apenas alguns campos e outros não?

Recommended Posts

Olá,

tenho uma tabela no SQL Server 2005 que tem os seguintes dados:

 

ID do pagamento

Data do pagamento

ID do aluno

forma de pagamento

 

acontece que ocorrem registros de pagamento "quase" duplicados.. veja:

 

REGISTRO 1:

ID do pagamento = 12

Data do pagamento = "08/02/2010 16:38"

ID do aluno = 17

forma de pagamento = "Visa"

 

REGISTRO 2:

ID do pagamento = 13

Data do pagamento = "08/02/2010 16:40"

ID do aluno = 17

forma de pagamento = "Visa"

 

Veja que os dois registros são iguais, muda apenas a hora do pagamento (2 minutos depois) e o ID do pagamento. Então, para fazer um select que agrupe esses dois registros, eu estou fazendo o seguinte:

 

SELECT DISTINCT ID_do_aluno, CAST(CONVERT(VARCHAR(10), data_do_pagamento, 112) AS DATETIME) AS 'DataSemHora', forma_de_pagamento from PAGAMENTOS order by DataSemHora desc

E é aí que vem o problema... veja que para agrupar eu precisei converter o campo de data (datetime) para apenas data, eliminando o horário da compra, só que fazendo isso, na hora de ordenar (order by) o SQL ordena os registros por data mas não sabe a que horas o pagamento foi feito, deixando os registros todos fora da ordem correta. O cliente precisa saber a ordem em que foram feitos os pagamentos naquele dia.

 

Tem como resolver isso?

Tentei algo parecido com isso:

 

SELECT DISTINCT(ID_do_aluno, CAST(CONVERT(VARCHAR(10), data_do_pagamento, 112) AS DATETIME) AS 'DataSemHora', forma_de_pagamento), data_do_pagamento from PAGAMENTOS order by data_do_pagamento desc

Mas não deu certo.

Valeu!!

Renan

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que assim pode dar certo:

SELECT DISTINCT ID_do_aluno,

CAST(CONVERT(VARCHAR(10), data_do_pagamento, 112) AS DATETIME) AS 'DataSemHora', forma_de_pagamento

from PAGAMENTOS

order by data_do_pagamento desc

 

ou

 

SELECT DISTINCT ID_do_aluno,

CAST(CONVERT(VARCHAR(10), data_do_pagamento, 112) AS DATETIME) AS 'DataSemHora', forma_de_pagamento

from PAGAMENTOS

order by [iD do pagamento] desc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não dá.... eu já tinha tentado isso.... o erro é esse:

ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

 

Parece que o parametro que eu coloco no "order by" precisa estar presente nos itens do select distinct

 

Mais alguma idéia?

 

 

 

Acho que assim pode dar certo:

SELECT DISTINCT ID_do_aluno,

CAST(CONVERT(VARCHAR(10), data_do_pagamento, 112) AS DATETIME) AS 'DataSemHora', forma_de_pagamento

from PAGAMENTOS

order by data_do_pagamento desc

 

ou

 

SELECT DISTINCT ID_do_aluno,

CAST(CONVERT(VARCHAR(10), data_do_pagamento, 112) AS DATETIME) AS 'DataSemHora', forma_de_pagamento

from PAGAMENTOS

order by [iD do pagamento] desc

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode tentar por subquery:

 

SELECT DISTINCT *

FROM ( SELECT ID_do_aluno,

CAST(CONVERT(VARCHAR(10), data_do_pagamento, 112) AS DATETIME) AS 'DataSemHora',

forma_de_pagamento

from PAGAMENTOS)

order by data_do_pagamento desc

 

T+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.