AJUDAR EM CONSULTA SQL!

JONASJTG 14/06/2016 21:19:24
#463524
Ai Pessoal blz.

Não sei se e o lugar correto de postar caso esteja errado já peço desculpas!

Tenho esta consulta que esta funcionado ok.

ComandoSQL = [Ô]SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 inner join Origemvacina orv on or1.Brinco = orv.Brinco WHERE or1.DatadeNasc Between #[Ô] & data_inicial & [Ô]# And #[Ô] & data_final & [Ô]#[Ô]

Mas preciso que nesta consulta só traga a ultima da vacina exemplo.

id brinco dtvacina
1 10 12/06/2016
1 10 13/06/2016
1 10 14/06/2016

Resultado seria

id brinco dtvacina
1 10 14/06/2016
LUIZCOMINO 15/06/2016 00:33:28
#463527
Tente

ComandoSQL = [Ô]SELECT Top 1 Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 inner join Origemvacina orv on or1.Brinco = orv.Brinco WHERE or1.DatadeNasc Between #[Ô] & data_inicial & [Ô]# And #[Ô] & data_final & [Ô]# order by orv.dtvacina desc[Ô]
JONASJTG 15/06/2016 00:59:30
#463529
Não deu certo!

Vou postar todo código para ter uma ideia melhor!(se não for suficiente posto um modelo para melhor analise!)

Private Sub filtro_multi_Click()
On Error GoTo trata_erro

Dim brinco As String
Dim pbrinco As String
Dim Nantigo As String
Dim Animal As String
Dim Especificar As String
Dim Observacoes As String
Dim ativo As String
Dim vacinado As String

Dim ComandoSQL As String

Dim i As Integer
Dim Soma As Double
Dim Soma2 As Double
Dim Soma3 As Double
Dim Soma4 As Double

Application.ScreenUpdating = False

brinco = txtBrincop.Text
pbrinco = txtpbrincop.Text
Nantigo = txtNantigop.Text
Animal = txtanimalp.Text
Especificar = txtEspecificarp.Text
Observacoes = txtObservacoesp.Text
ativo = txtativop.Text
vacinado = txtvacinadop.Text

If txt_data_inicial.Text = [Ô][Ô] Or txt_data_final.Text = [Ô][Ô] Then
If Me.optDataNasc.Value = False Or Me.optDataVacina.Value = False Then

ComandoSQL = [Ô]SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1, Origemvacina orv WHERE or1.Brinco = orv.Brinco[Ô]

End If
End If
If Me.optDataNasc.Value = True Then

data_inicial = Format(Me.txt_data_inicial, [Ô]mm/dd/yyyy[Ô])
data_final = Format(Me.txt_data_final, [Ô]mm/dd/yyyy[Ô])

ComandoSQL = [Ô]SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 inner join Origemvacina orv on or1.Brinco = orv.Brinco WHERE or1.DatadeNasc Between #[Ô] & data_inicial & [Ô]# And #[Ô] & data_final & [Ô]#[Ô]
End If

If Me.optDataVacina.Value = True Then
data_inicial = Format(Me.txt_data_inicial, [Ô]mm/dd/yyyy[Ô])
data_final = Format(Me.txt_data_final, [Ô]mm/dd/yyyy[Ô])

ComandoSQL = [Ô]SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 LEFT JOIN Origemvacina orv on or1.Brinco = orv.Brinco WHERE orv.dtvacina Between #[Ô] & data_inicial & [Ô]# And #[Ô] & data_final & [Ô]#[Ô]

End If

If brinco = [Ô][Ô] Then
Else
ComandoSQL = ComandoSQL & [Ô] AND or1.Brinco like[ô][Ô] & brinco & [Ô][ô] [Ô]
End If
If pbrinco = [Ô][Ô] Then
Else
ComandoSQL = ComandoSQL & [Ô] AND or1.Pbrinco like[ô][Ô] & pbrinco & [Ô][ô] [Ô]
End If
If Nantigo = [Ô][Ô] Then
Else
ComandoSQL = ComandoSQL & [Ô] AND or1.Nantigo like[ô][Ô] & Nantigo & [Ô][ô] [Ô]
End If
If Animal = [Ô][Ô] Then
Else
ComandoSQL = ComandoSQL & [Ô] AND or1.Animal like[ô][Ô] & Animal & [Ô][ô] [Ô]
End If
If Especificar = [Ô][Ô] Then
Else
ComandoSQL = ComandoSQL & [Ô] AND or1.Especificar like[ô][Ô] & Especificar & [Ô][ô] [Ô]
End If
If Observacoes = [Ô][Ô] Then
Else
ComandoSQL = ComandoSQL & [Ô] AND or1.Observacoes like[ô][Ô] & Observacoes & [Ô][ô] [Ô]
End If
If ativo = [Ô][Ô] Then
Else
ComandoSQL = ComandoSQL & [Ô] AND or1.ativo like[ô][Ô] & ativo & [Ô][ô] [Ô]
End If
If vacinado = [Ô][Ô] Then
Else
ComandoSQL = ComandoSQL & [Ô] AND orv.vacinado like[ô][Ô] & vacinado & [Ô][ô] [Ô]
End If

Call Conecta
Set consulta = banco.OpenRecordset(ComandoSQL)
lstLista.ListItems.Clear
lstLista.ColumnHeaders.Clear

With lstLista
.Gridlines = True
.View = lvwReport
.FullRowSelect = True
.ColumnHeaders.Add(, , [Ô]Nº[Ô], Width:=100).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]Brinco[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]P.Brinco[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]NºAnca[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]Nascimento[Ô], Width:=10).Tag = [Ô]date[Ô]
.ColumnHeaders.Add(, , [Ô]Raca[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]Animal[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]Situação[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]Fazenda[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]Observações[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]Era(Idade Atual)[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]Ativo[Ô], Width:=10).Tag = [Ô][Ô]
.ColumnHeaders.Add(, , [Ô]Vacinação[Ô], Width:=10).Tag = [Ô]date[Ô]
.ColumnHeaders.Add(, , [Ô]Vac.[Ô], Width:=48).Tag = [Ô][Ô]
End With

While Not consulta.EOF
Set List = lstLista.ListItems.Add(Text:=consulta(0)) [ô]id
[ô]Deixa em branco se a data estiver zerada
If consulta(1) = [Ô]0000[Ô] Then
List.SubItems(1) = [Ô][Ô]
Else
List.SubItems(1) = consulta(1)
End If [ô]Brinco
If consulta(2) = [Ô]0000[Ô] Then
List.SubItems(2) = [Ô][Ô]
Else
List.SubItems(2) = consulta(2)
End If [ô]Pbrinco
If consulta(3) = [Ô]0000[Ô] Then
List.SubItems(3) = [Ô][Ô]
Else
List.SubItems(3) = consulta(3)
End If [ô]Nantigo
If consulta(4) = [Ô]00:00:00[Ô] Then
List.SubItems(4) = [Ô][Ô]
Else: List.SubItems(4) = consulta(4)
End If [ô]DatadeNasc
List.SubItems(5) = consulta(5) [ô]raca
List.SubItems(6) = consulta(6) [ô]animal
List.SubItems(7) = consulta(7) [ô]Especificar
List.SubItems(8) = consulta(8) [ô]fazenda
List.SubItems(9) = consulta(9) [ô]Observacoes
List.SubItems(10) = consulta(10) [ô]IdadeAtualdasVacas
List.SubItems(11) = consulta(11) [ô]ativo
If consulta(12) = [Ô]00:00:00[Ô] Then
List.SubItems(12) = [Ô][Ô]
Else: List.SubItems(12) = consulta(12)
End If [ô]Vacinação
List.SubItems(13) = consulta(13) [ô]Vac.
consulta.MoveNext
Wend

Dim x, j As Integer
For x = 1 To Me.lstLista.ListItems.Count
With Me.lstLista
If .ListItems(x).ListSubItems(11).Text = [Ô]Não[Ô] Then
For j = 1 To .ColumnHeaders.Count - 1
.ListItems(x).ListSubItems(j).ForeColor = vbRed
Next
ElseIf .ListItems(x).ListSubItems(7).Text = [Ô]Novilha Cab. Local[Ô] Then
For j = 1 To .ColumnHeaders.Count - 1
.ListItems(x).ListSubItems(j).ForeColor = vbBlack
Next
ElseIf .ListItems(x).ListSubItems(7).Text = [Ô]Vaca Leiteira Local[Ô] Then
For j = 1 To .ColumnHeaders.Count - 1
.ListItems(x).ListSubItems(j).ForeColor = vbBlack
Next
ElseIf .ListItems(x).ListSubItems(7).Text = [Ô]Touro Local[Ô] Then
For j = 1 To .ColumnHeaders.Count - 1
.ListItems(x).ListSubItems(j).ForeColor = vbBlue
Next
End If
End With
Next

Call Desconecta
Call RedimensionaColuna

Me.lbl_registros = Me.lstLista.ListItems.Count & [Ô] Animal(is) encontrado(s).[Ô]

For i = 1 To lstLista.ListItems.Count
If lstLista.ListItems.Item(i).SubItems(7) = [Ô]Vaca Local[Ô] Then
Soma = Soma + 1
End If
Next i
Me.lbl_registros2 = Soma & [Ô] Vaca(s) encontrada(s).[Ô]

For i = 1 To lstLista.ListItems.Count
If lstLista.ListItems.Item(i).SubItems(7) = [Ô]Novilha Cab. Local[Ô] Then
Soma2 = Soma2 + 1
End If
Next i
Me.lbl_registros3 = Soma2 & [Ô] Novilha(s) Cabeceira(s) encontrada(s).[Ô]

For i = 1 To lstLista.ListItems.Count
If lstLista.ListItems.Item(i).SubItems(7) = [Ô]Vaca Leiteira Local[Ô] Then
Soma3 = Soma3 + 1
End If
Next i
Me.lbl_registros4 = Soma3 & [Ô] Vaca Leiteira(s) encontrada(s).[Ô]

For i = 1 To lstLista.ListItems.Count
If lstLista.ListItems.Item(i).SubItems(7) = [Ô]Touro Local[Ô] Then
Soma4 = Soma4 + 1
End If
Next i
Me.lbl_registros5 = Soma4 & [Ô] Touro(s) encontrada(s).[Ô]

trata_erro:
Call RedimensionaColuna
End Sub
LUIZCOMINO 15/06/2016 06:36:50
#463533
Mas deu algum erro com o código que te mandei?, qual banco de dados vc esta usando?, access?
ALVAROVB2009 15/06/2016 09:20:57
#463537
Resposta escolhida
Jonas primeiro fale para nós qual o banco que esta usando
Vou colocar as duas opções mais usadas

Seu comando
ComandoSQL = [Ô]SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 inner join Origemvacina orv on or1.Brinco = orv.Brinco
WHERE or1.DatadeNasc Between #[Ô] & data_inicial & [Ô]# And #[Ô] & data_final & [Ô]#[Ô]

comando ajustado - Access
ComandoSQL = [Ô]SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 inner join Origemvacina orv on or1.Brinco = orv.Brinco
WHERE or1.DatadeNasc Between #[Ô] & format(cdate(data_inicial),[Ô]MM/DD/YYYY[Ô]) & [Ô]# And #[Ô] & format(cdate(data_final),[Ô]MM/DD/YYYY[Ô]) & [Ô]# order by orv.dtvacina DESC[Ô]

comando ajustado - Mysql
ComandoSQL = [Ô]SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 inner join Origemvacina orv on or1.Brinco = orv.Brinco
WHERE or1.DatadeNasc Between [ô][Ô] & format(cdate(data_inicial),[Ô]YYYY-MM-DD[Ô]) & [Ô][ô] And [ô][Ô] & format(cdate(data_final),[Ô]YYYY-MM-DD[Ô]) & [Ô][ô] order by orv.dtvacina DESC[Ô]

Acredito que com isso resolva o seu problema, a data para o Access tem que ser formatada em mes/dia/ano e tem que ser entre # e para o mysql tem que ano-mes-dia e tem que ser entre [ô] , e tem que colocar a ordenação como DESC na data que vc deseja selecionar no caso a orv.dtvacina , dessa forma a data vem da mais recente para a mais velha, trazendo como a primeira opção a data que vc deseja, pode usar também o TOP 1 que o Luiz também colocou, más a de qqer forma o seu primeiro registro será a data que deseja.

Bom acho que é isso, qqer coisa posta ai a dúvida e se der algum erro também, senão não esqueça de encerrar o tópico
JONASJTG 15/06/2016 11:33:52
#463553
Bom dia pessoal!

Queria agradecer pelas dicas mas não entendo pq não da certo. Vou postar o projeto para vcs se puder me ajudar se for possível!
Sou iniciante e estou aprendendo tudo na raça então se puder agradeço bastante!

LUIZCOMINO 15/06/2016 15:03:21
#463561
Amigo faça assim na consulta, o top logo depois do distinct

ComandoSQL = [Ô]SELECT Distinct Top 1 or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 inner join Origemvacina orv on or1.Brinco = orv.Brinco WHERE or1.DatadeNasc Between #[Ô] & data_inicial & [Ô]# And #[Ô] & data_final & [Ô]# order by orv.dtvacina desc[Ô]
ALVAROVB2009 15/06/2016 15:18:25
#463565
Vamos lá
Primeiro - onde vc esta desenvolvendo é em VBA, é diferente do VB6, más o comando SQL vai funcionar
Segundo - vc esta tentando fazer o sql entender um texto como data, pois a variável que vc colocou, esta guardando a data apenas como se fosse um texto
Terceiro - vc não esta colocando o comando inteiro como foi falado para vc
O comando que vc deve usar é assim, esquece as variáveis que vc criou Data_inicial e Data_Final
Vamos usar somente o format e cdate, isso deverá resolver o seu problema
Esse é o seu comando
ComandoSQL = [Ô]SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 LEFT JOIN Origemvacina orv on or1.Brinco = orv.Brinco WHERE orv.dtvacina Between #[Ô] & data_inicial & [Ô]# And #[Ô] & data_final & [Ô]#[Ô]

Esse é o comando ajustado
ComandoSQL = [Ô]SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado FROM Origem or1 LEFT JOIN Origemvacina orv on or1.Brinco = orv.Brinco
WHERE orv.dtvacina Between #[Ô] & format(cdate(Me.txt_data_inicial),[Ô]MM/DD/YYYY[Ô]) & [Ô]# And #[Ô] & format(cdate(Me.txt_data_final),[Ô]MM/DD/YYYY[Ô]) & [Ô]# order by orv.dtvacina DESC[Ô]

Nesse comando transformei o que foi digitado em data - comando CDATE - dessa forma o sql sabe que aquilo é uma data e usei o format para deixa na formatação correta
No meu pc não rodou o projeto porque não tenho os itens do VBA instalado, porque eu não uso, más testa ai, qqer coisa da um toque
JONASJTG 16/06/2016 08:47:23
#463598
Bom dia a todos!

Eu segui as suas instruções ALVAROVB2009 mas não deu certo.

Quando clico em pesquisar nada acontece não sei o porque.
Se alguém puder olhar o projeto e dar umas dicas agradeço bastante!
ALVAROVB2009 16/06/2016 09:33:16
#463601
Jonas, peguei o comando

SELECT Distinct or1.*, orv.dtvacina,orv.Vacinado
FROM Origem or1
LEFT JOIN Origemvacina orv on or1.Brinco = orv.Brinco
WHERE orv.dtvacina Between #01/01/2000# And #01/01/2020#
order by orv.dtvacina desc

Esse comando é uma simulação que alguém queira fazer a pesquisa entre esse período e rodei no seu banco e me trouxe vários resultados que vc precisa, então ajustei o que faltava aqui para rodar o seu projeto e ver onde poderia estar dando o problema para não trazer os dados, e verifiquei que vc tirou todos os objetos, sendo que não seria viável para mim colocar todos os objetos para fazer funcionar
Então acredito que possa ser algo no momento que esteja alimentando o seu list
JONASJTG 16/06/2016 11:50:29
#463618
Bom dia Alvaro!

Eu não entendi muito o que disse mas a parte que eu entende!

Eu uso e comado SQL alimentar a listview.

Eu não entende essa parte [Ô]VC TIROU TODOS OS OBJETOS[Ô]

O projeto isso mesmo as tabelas estão certas pra fazer pesquisa esta tudo ai nao entende o que ta faltando.
Página 1 de 7 [65 registro(s)]
Tópico encerrado , respostas não são mais permitidas