Ir para conteúdo

Arquivado

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

Hulkstar

SELECT SQL Leilão.

Recommended Posts

Eu criei um sistema de leilão,porém eu preciso no final do leilão pegar o maior lance para diversos produtos diferentes,vou deixar uma print abaixo,porém o código sql que estou usando não está me trazendo os resultados corretamente.

 

SELECT id,id_produto,id_usuario,MAX(id_lance) FROM leilao_arremates GROUP BY id_produto

 

image.png.bcbac9a152751754114ad994c91553f2.png

 

Obrigado pela ajuda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu consegui fazer da seguinte maneira,porém eu gostaria de saber se existir lances iguais se teria como escolher o primeiro lance.

 

SELECT id,id_produto,id_usuario,id_lance FROM leilao_arremates AS m1 WHERE id_lance = ( SELECT MAX(id_lance) FROM leilao_arremates AS m2 WHERE m1.id_produto = m2.id_produto)

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o teste com esse código:

select  le.id_usuario, le.id_produto, le.id_lance, le.data_lance

from leilao_arremates le

inner join (select id_produto,max(id_lance) as max_lance, min(data_lance) as min_data from leilao_arremates group by id_produto) X1 
ON X1.max_lance = le.id_lance AND X1.min_data = le.data_lance AND X1.id_produto = le.id_produto

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o teste com o seguinte código e não funcionou muito bem,alguns lances de alguns usuários acabaram ficando de fora,como se tivessem sido ignorados.

 

SELECT le.id_usuario, le.id_produto, le.id_lance, le.data_lance FROM leilao_arremates le INNER JOIN (SELECT id_produto,MAX(id_lance) as max_lance, MIN(data_lance) AS min_data FROM leilao_arremates GROUP BY id_produto) X1 ON X1.max_lance = le.id_lance AND X1.min_data = le.data_lance AND X1.id_produto = le.id_produto

 

Se tiver alguma outra sugestão,me avisa por favor..

Compartilhar este post


Link para o post
Compartilhar em outros sites
43 minutos atrás, Hulkstar disse:

Fiz o teste com o seguinte código e não funcionou muito bem,alguns lances de alguns usuários acabaram ficando de fora,como se tivessem sido ignorados.

 


SELECT le.id_usuario, le.id_produto, le.id_lance, le.data_lance FROM leilao_arremates le INNER JOIN (SELECT id_produto,MAX(id_lance) as max_lance, MIN(data_lance) AS min_data FROM leilao_arremates GROUP BY id_produto) X1 ON X1.max_lance = le.id_lance AND X1.min_data = le.data_lance AND X1.id_produto = le.id_produto

 

Se tiver alguma outra sugestão,me avisa por favor..

Você quer o lance máximo por ordem de chegada n é isso?

 

Detalhe mais o que você quer, poste a saída que deu rodando o código e a saída que você espera.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja bem,vou deixar 2 prints,para você ter mais ou menos uma ideia do que eu preciso,se eu utilizar o código abaixo.

 

SELECT id,id_produto,extra_deck,id_usuario,id_lance,data_lance FROM leilao_arremates AS m1 WHERE id_lance = ( SELECT MAX(id_lance) FROM leilao_arremates AS m2 WHERE m1.id_produto = m2.id_produto)

 

O resultado que eu obtenho é o seguinte:

 

image.png.b1308df4407294afecf76e0c9efd8dfb.png

 

Como circulado acima,existe dois lances iguais,no caso o que teria que ser válido é apenas o primeiro lance,agora caso eu use o código abaixo.

 

SELECT le.id,le.id_usuario, le.id_produto, le.id_lance, le.data_lance FROM leilao_arremates le INNER JOIN (SELECT id_produto,MAX(id_lance) as max_lance, MIN(data_lance) AS min_data FROM leilao_arremates GROUP BY id_produto) X1 ON X1.max_lance = le.id_lance AND X1.min_data = le.data_lance AND X1.id_produto = le.id_produto

 

Eu tenho o seguinte resultado:

 

image.png.9e3a748170ade3ec1075d5df25225b8a.png

 

Resumindo,caso exista dois lances iguais,eu preciso que o sistema pegue o primeiro lance,de acordo com a data cadastrada no sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Spoiler
57 minutos atrás, Hulkstar disse:

Veja bem,vou deixar 2 prints,para você ter mais ou menos uma ideia do que eu preciso,se eu utilizar o código abaixo.

 



SELECT id,id_produto,extra_deck,id_usuario,id_lance,data_lance FROM leilao_arremates AS m1 WHERE id_lance = ( SELECT MAX(id_lance) FROM leilao_arremates AS m2 WHERE m1.id_produto = m2.id_produto)

 

O resultado que eu obtenho é o seguinte:

 

image.png.b1308df4407294afecf76e0c9efd8dfb.png

 

Como circulado acima,existe dois lances iguais,no caso o que teria que ser válido é apenas o primeiro lance,agora caso eu use o código abaixo.

 



SELECT le.id,le.id_usuario, le.id_produto, le.id_lance, le.data_lance FROM leilao_arremates le INNER JOIN (SELECT id_produto,MAX(id_lance) as max_lance, MIN(data_lance) AS min_data FROM leilao_arremates GROUP BY id_produto) X1 ON X1.max_lance = le.id_lance AND X1.min_data = le.data_lance AND X1.id_produto = le.id_produto

 

Eu tenho o seguinte resultado:

 

image.png.9e3a748170ade3ec1075d5df25225b8a.png

 

Resumindo,caso exista dois lances iguais,eu preciso que o sistema pegue o primeiro lance,de acordo com a data cadastrada no sistema.

 

Tente esse código, fiz com duas subqueries mas se der certo a gente tenta otimizar.

select lei.id_produto,lei.id_usuario, lei.id_lance,lei.data_lance from leilao_arremates lei,
(select le.id_produto, le.id_lance,min(le.data_lance) as min_data
from leilao_arremates le, 
(select id_produto,max(id_lance) as max_lance from leilao_arremates group by id_produto) as x1
where le.id_lance = x1.max_lance
AND le.id_produto = x1.id_produto
group by le.id_produto, le.id_lance) as x2
where  lei.id_produto = x2.id_produto AND
lei.id_lance = x2.id_lance AND
lei.data_lance = x2.min_data

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
43 minutos atrás, kim.y disse:
  Mostrar conteúdo oculto

 

Tente esse código, fiz com duas subqueries mas se der certo a gente tenta otimizar.


select lei.id_produto,lei.id_usuario, lei.id_lance,lei.data_lance from leilao_arremates lei,
(select le.id_produto, le.id_lance,min(le.data_lance) as min_data
from leilao_arremates le, 
(select id_produto,max(id_lance) as max_lance from leilao_arremates group by id_produto) as x1
where le.id_lance = x1.max_lance
AND le.id_produto = x1.id_produto
group by le.id_produto, le.id_lance) as x2
where  lei.id_produto = x2.id_produto AND
lei.id_lance = x2.id_lance AND
lei.data_lance = x2.min_data

 

 

Cara,funcionou perfeitamente,da maneira que eu estava querendo,muito obrigado mesmo,ajudou bastante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Kelven
      Boa noite,
      Pessoal estou com um cliente que quer leiloar um produto online, porém como o Mercado Livre não tem mais a opção de vender por arremate eu não sei o que indicar pra ele, alguém sabe alguma plataforma que se possa leiloar um produto online? 
       
      Desculpe como não achei nenhum forum que esse assunto encaixava, acabei postando aqui.
    • Por Carlos Primo
      Olá, fiz um código VBA Sql para consultar dados de uma tabela e atribuí os valores dos dados em 3 variveis, porem uma das váriaveis não funciona corretamente.
      Os dados desta variavel que não funciona possui letras e números, pois os dados da tabela referente a esta variavel possui letras e números.
      Quando coloco o valor direto dentro do select o código funciona, mas com variável não da certo.
      Também funciona quando retiro esta variável.
      No código, o nome da variável é PREFIX
       
      O erro que aparece é esse:
      Run-time error '-2147217900 (80040e14)':
      [Microsoft][ODBC SQL Server Driver]  Invalid column name 'Y18HW'.

       
      Segue o código:
       
      Sub sb_RetornaConsulta()
       
      Application.ScreenUpdating = False
         
          Dim obj_Connection As New ADODB.Connection
          Dim obj_RecordSet As New ADODB.Recordset
          Dim str_SQL As String
          Dim str_PlanilhaDestino As String
          Dim str_ConnString As String
          Dim str_LinhaInicial As String
          Dim nr_coluna As Integer
          Dim Prefix As Variant
          Dim S_Inicia As Variant
          Dim S_Fina As Variant
          
           Prefix = frm_Serie.Pref.Value        'Valor do prefixo digitado no textbox da userform = Y18HW 
           S_Inicia = frm_Serie.S_Inicial.Value 'Valor do Inicial digitado no textbox da userform = 177781 
           S_Fina = frm_Serie.S_Final.Value     'Valor do Final digitado no textbox da userform = 179780
                
          str_PlanilhaDestino = "Resultado"
          str_ConnString = "Driver={SQL Server};server=NOME DO SERVER; Database=NOME DA BASE; UID=USUÁRIO;PWD=SENHA"
          str_LinhaInicial = 3
          
          
          
          str_SQL = "SELECT TABELA.NRSerie AS Serie, TABELA.BancadaID AS Bancada, " & _
                      " TABELA.ResQn AS Qn, TABELA.ResQt AS Qt, " & _
                      " TABELA.ResQm AS Qm, TABELA.Data AS [Data Produção] " & _
                      " FROM TABELA " & _
                      " WHERE TABELA.Serie >= " & S_Inicia & " " & _
                      " AND TABELA.Serie <= " & S_Fina & " "
                      " AND Tabela.Prefixo = " & Prefix & " " & _
                      " ORDER BY TABELA.NRSerie DESC "
              
          ' Limpa dados
          Sheets(str_PlanilhaDestino).Select
          Cells.Select
          Selection.ClearContents
          Range("A1").Select
       
          ' Executa query no SQL
          obj_Connection.Open str_ConnString
          obj_RecordSet.Source = obj_Connection
          obj_RecordSet.Open str_SQL, obj_Connection
              
          ' Inclui cabeçalhos da query:
          For nr_coluna = 0 To obj_RecordSet.Fields.Count - 1
              Worksheets(str_PlanilhaDestino).Cells(str_LinhaInicial, nr_coluna + 1).Value = obj_RecordSet.Fields(nr_coluna).Name
          Next
           
          ' Salva dados no Excel
          Sheets(str_PlanilhaDestino).Cells(CInt(str_LinhaInicial + 1), 1).CopyFromRecordset obj_RecordSet
       
          ' Finaliza conexão e objetos
          obj_RecordSet.Close
          obj_Connection.Close
          Set obj_RecordSet = Nothing
          Set obj_Connection = Nothing
           
           
           Application.ScreenUpdating = True
           
           frm_Serie.Hide
           
      End Sub
    • Por Igor José
      Boa noite!
       
      Estou lançando um novo site de leilões de centavos, e estou procurando um sócio que esteja disposto a investir no projeto.
       
      O investimento será utilizado diretamente na divulgação do site. Já tenho tudo pronto, inclusive o site já esta online com um layout super profissional, preciso somente de um investidor para divulgar.
       
      O retorno é rápido e garantido. Já contamos inclusive com uma equipe de auditoria para fiscalizar os leilões, passando mais confiança ao cliente.
       
      Será realizado um contrato de sociedade para que não ocorra problemas.
       
      Quem estiver interesse favor enviar mensagem no privado, para que eu possa enviar mais informações.
       
      Grande abraço!
×

Informação importante

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