Ir para conteúdo

POWERED BY:

Arquivado

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

luciano

conflito com DISTINCT

Recommended Posts

Olá pessoal estou a dias tentando resolver esta clausula alguem poderia me ajudar

preciso que lista 12 registro aleatorios sem repeti-los (banco access)

 

então fiz assim funciona uma beleza mais repete:

PESQUISAR="SELECT TOP 12 * FROM tabela order by Rnd(Int(Now()*[iD])-Now()*[iD]) "

 

entao fiz assim, funciona mais não dá aleatorio:

PESQUISAR="SELECT distinct TOP 8 * FROM tabela "

 

o distinct não roda com order by

 

alguem teria uma sugestão.

 

muito obrigado mesmo

Luciano

Compartilhar este post


Link para o post
Compartilhar em outros sites

esta gerando algum erro ?

e tente assim:

 

SELECT  distinct ID TOP 12 FROM tabela     order by Rnd(Int(Now()*[iD])-Now()*[iD])

 

caso de conflito mude o distinct para DISTINCTROW

 

select DISTINCTROW campo from tabela order by id asc

 

DISTINCTROW - Omite dados com base em registros inteiros duplicados e não apenas campos duplicados. Por exemplo, você pode criar uma consulta que associe as tabelas Customers e Orders no campo CustomerID. A tabela Customers não possui campos CustomerID duplicados, mas a tabela Orders possui, pois cada cliente pode ter muitos pedidos. A instrução SQL a seguir mostra como você pode usar o DISTINCTROW para criar uma lista de empresas que têm pelo menos um pedido mas sem fornecer quaisquer detalhes sobre esses pedidos:

 

SELECT DISTINCTROW CompanyName
FROM Customers INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID
ORDER BY CompanyName;

 

Se você omitir DISTINCTROW, essa consulta criará várias linhas para cada empresa que tiver mais de um pedido.

 

DISTINCTROW entra em vigor somente quando você seleciona campos de algumas, mas não de todas, as tabelas usadas na consulta. DISTINCTROW será ignorado se a sua consulta incluir apenas uma tabela ou se você retirar campos de todas as tabelas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia,

 

Eu acho que essa query vai ficar melhor assim com o group by.

 

Eu fiz o select direto no banco de dados e estou postando aqui

select *  from tabela group by nome_coluna order by nome_coluna desc

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Gilberto agradeço sua ajuda, fiz como você falou mais ainda repete registro

 

tenho um banco access

id (auto numeracao)

titulo (texto)

descricao (memorando)

num (numerico)

 

precisava listar 12 registros aleatorios sem repetir o titulo

 

por favor me de uma luz

fazem dias que estou me matando aqui

 

tentei fazer assim:

PESQUISAR1 = "select top 12 * from produtos order by Rnd(Int(Now()*[num])-Now()*[num]); "

mais repete o titulo

 

muito obrigado mesmo

Luciano

 

 

Bom dia,

 

Eu acho que essa query vai ficar melhor assim com o group by.

 

Eu fiz o select direto no banco de dados e estou postando aqui

select *  from tabela group by nome_coluna order by nome_coluna desc

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

 

Se esta repedindo coisa igual é pq tem coisa diferente na coluna que você esta usando como group by. O que não tiver igual ele não ira repetir.

 

Faz o teste direto no seu banco de dados pra você ver.

 

No seu select que você fez

PESQUISAR1 = "select top 12 * from produtos order by Rnd(Int(Now()*[num])-Now()*[num]); "

ele não esta sendo agrupado por isso que vai repetir tudo mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha esta parte do code que uso para nao repetir.

 

RANDOM com registros de um banco de dados sem repetição.

 

<%


' Gravamos o Recordset em um Array Bidimensional

Set strRS = Server.CreateObject("ADODB.RecordSet")

strRS.Open "SELECT * FROM membros ", strConexao, 3, 3

arySub = strRS.getRows()



' Fechamos a conexão pois não usaremos mais

strRS.Close

Set strRS = Nothing

strConexao.Close

Set strConexao = Nothing



Dim TotalReg, TotalNum, vran, x, encontrou, arrGerados(0)

Dim Numreg, verGerado, var_arrGerados, xLoop



Function GeraRegistros(TotalNum)

TotalReg=Cint(uBound(arySub,2)) ' Encontramos o Maior Array Gerado

vran = 1



For x = 0 To TotalNum-1 ' LOOP de 1 p/ Total solicitado

encontrou = 1

Randomize() ' Geramos o primeiro Random

NumReg = Cint((rnd*TotalReg))

verGerado = Split(var_arrGerados,",") ' Verifica se nº gerado

For xLoop = LBound(verGerado) To UBound(verGerado)

IF Trim(verGerado(xLoop)) = Trim(NumReg) Then

'Este "response" comentado abaixo, indica qual número se repetiram

'E não armazena no Array único, fazendo gerando um novo Random

'response.write "<b>[ "& verGerado(xLoop) &","& NumReg &" ]</b><br> "

x = x - 1

encontrou = 2

Exit For

End IF

Next

IF encontrou = 1 Then ' NÃO ENCONTROU, gera o próximo número



IF vran = 1 Then ' primeiro (Verificar este trecho)

arrGerados(0) = NumReg

vran = 2

Else

arrGerados(0) = arrGerados(0) &","& NumReg

End IF

var_arrGerados = Join(arrGerados)

End IF

Next

GeraRegistros = var_arrGerados

End Function

' Array gerado, podemos iniciar a formatação de perguntas

number = GeraRegistros(3)



verNum = Split(number, ",")

For x = LBound(verNum) to UBound(verNum)

response.write arySub(0,verNum(x)) &"."

response.write arySub(1,verNum(x)) &"<br>"

Next

%>

 

ou arrumar seu RND do SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu entendi bem, tente criar um outro critério de ordenação; ex:

select titulo from tabela
group by titulo
order by rnd(count(titulo));

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente com o DISTINCTROW

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.