ULTIMA DATA COM WHERE
Amigos, boa tarde!
Tenho em uma tabela informações com diversas vendas de varios clientes e, gostaria de filtrar de forma a me demonstrar
os clientes que não compraram desde determinado dia.
ex.:
filtrar clientes que não compram a 180 dias 12/08/2010.
Estou usando o last para retornar a última compra, entretanto, não estou acertando o Where para filtrar estes clientes.
segue o código:
Public Sub abre_data()
Dim scnn As String
Dim newlist As ListItem
Dim nitens As Integer
Dim dia As Date
lista.ListItems.Clear
dia = Now
mycon.ConnectionString = [Ô]provider=microsoft.jet.oledb.4.0;[Ô] & [Ô] data source=[Ô] & App.Path & [Ô]\db001\bc001.mdb[Ô]
mycon.Open
With mycmd
.ActiveConnection = mycon
.CommandType = adCmdText
If frminicial.txtemp = [Ô]170[Ô] Then
.CommandText = [Ô]SELECT vendas.cliente, cliente.nome, cliente.cidade, cliente.codigo, Last(vendas.data) as ultima_compra, cliente.bairro FROM cliente INNER JOIN vendas ON cliente.codigo = vendas.cliente where 5 < #[Ô] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [Ô]# GROUP BY vendas.cliente, cliente.nome, cliente.cidade, cliente.codigo, cliente.bairro order by 5[Ô]
Set myrs = .Execute
ElseIf frminicial.txtemp = [Ô]190[Ô] Then
.CommandText = [Ô]SELECT vendas190.cliente, cliente190.nome, cliente190.cidade, cliente190.codigo, Last(vendas190.data) as ultima_compra, cliente.bairro FROM cliente190 INNER JOIN vendas190 ON cliente190.codigo = vendas190.cliente where 5 < #[Ô] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [Ô]# GROUP BY vendas190.cliente, cliente190.nome, cliente190.cidade, cliente190.codigo, cliente.bairro order by 5[Ô]
Set myrs = .Execute
End If
End With
Do Until myrs.EOF
Set newlist = lista.ListItems.Add(, [Ô] Key [Ô] & myrs([Ô]cliente[Ô]), myrs([Ô]cliente[Ô]))
newlist.SubItems(1) = [Ô][Ô] & myrs([Ô]nome[Ô])
newlist.SubItems(2) = [Ô][Ô] & myrs([Ô]bairro[Ô])
newlist.SubItems(3) = [Ô][Ô] & myrs([Ô]cidade[Ô])
newlist.SubItems(4) = Format(myrs!ultima_compra, [Ô]dd/mm/yyyy[Ô])
myrs.MoveNext
Loop
nitens = lista.ListItems.Count
Me.txtnumber = nitens
myrs.Close
Set myrs = Nothing
mycon.Close
End Sub
Saberiam me informar como posso resolver esse problema?
Desde já agradeço.
Tenho em uma tabela informações com diversas vendas de varios clientes e, gostaria de filtrar de forma a me demonstrar
os clientes que não compraram desde determinado dia.
ex.:
filtrar clientes que não compram a 180 dias 12/08/2010.
Estou usando o last para retornar a última compra, entretanto, não estou acertando o Where para filtrar estes clientes.
segue o código:
Public Sub abre_data()
Dim scnn As String
Dim newlist As ListItem
Dim nitens As Integer
Dim dia As Date
lista.ListItems.Clear
dia = Now
mycon.ConnectionString = [Ô]provider=microsoft.jet.oledb.4.0;[Ô] & [Ô] data source=[Ô] & App.Path & [Ô]\db001\bc001.mdb[Ô]
mycon.Open
With mycmd
.ActiveConnection = mycon
.CommandType = adCmdText
If frminicial.txtemp = [Ô]170[Ô] Then
.CommandText = [Ô]SELECT vendas.cliente, cliente.nome, cliente.cidade, cliente.codigo, Last(vendas.data) as ultima_compra, cliente.bairro FROM cliente INNER JOIN vendas ON cliente.codigo = vendas.cliente where 5 < #[Ô] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [Ô]# GROUP BY vendas.cliente, cliente.nome, cliente.cidade, cliente.codigo, cliente.bairro order by 5[Ô]
Set myrs = .Execute
ElseIf frminicial.txtemp = [Ô]190[Ô] Then
.CommandText = [Ô]SELECT vendas190.cliente, cliente190.nome, cliente190.cidade, cliente190.codigo, Last(vendas190.data) as ultima_compra, cliente.bairro FROM cliente190 INNER JOIN vendas190 ON cliente190.codigo = vendas190.cliente where 5 < #[Ô] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [Ô]# GROUP BY vendas190.cliente, cliente190.nome, cliente190.cidade, cliente190.codigo, cliente.bairro order by 5[Ô]
Set myrs = .Execute
End If
End With
Do Until myrs.EOF
Set newlist = lista.ListItems.Add(, [Ô] Key [Ô] & myrs([Ô]cliente[Ô]), myrs([Ô]cliente[Ô]))
newlist.SubItems(1) = [Ô][Ô] & myrs([Ô]nome[Ô])
newlist.SubItems(2) = [Ô][Ô] & myrs([Ô]bairro[Ô])
newlist.SubItems(3) = [Ô][Ô] & myrs([Ô]cidade[Ô])
newlist.SubItems(4) = Format(myrs!ultima_compra, [Ô]dd/mm/yyyy[Ô])
myrs.MoveNext
Loop
nitens = lista.ListItems.Count
Me.txtnumber = nitens
myrs.Close
Set myrs = Nothing
mycon.Close
End Sub
Saberiam me informar como posso resolver esse problema?
Desde já agradeço.
>
Olha não fiz testes com seu código mas só para informa-lo que a data deve estar delimitado com aspas simples
where 5 < #[Ô] & [txt-color=#0000f0][Ô] [ô] [Ô][/txt-color] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [txt-color=#0000f0][Ô] [ô] [Ô][/txt-color] & [Ô]# GROUP BY
<
Olha não fiz testes com seu código mas só para informa-lo que a data deve estar delimitado com aspas simples
where 5 < #[Ô] & [txt-color=#0000f0][Ô] [ô] [Ô][/txt-color] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [txt-color=#0000f0][Ô] [ô] [Ô][/txt-color] & [Ô]# GROUP BY
<
Amigo, bom dia!
Peço desculpas más, esqueci de avisa-lo que estou trabalhando com access 2007 e campos data/hora, sendo assim não aceita aspas simples.
O problema foi resolvido com o uso do having (alias).
segue o código resolvido:
Public Sub abre_data()
Dim scnn As String
Dim newlist As ListItem
Dim nitens As Integer
Dim dia As Date
lista.ListItems.Clear
dia = Now
mycon.ConnectionString = [Ô]provider=microsoft.jet.oledb.4.0;[Ô] & [Ô] data source=[Ô] & App.Path & [Ô]\db001\bc001.mdb[Ô]
mycon.Open
With mycmd
.ActiveConnection = mycon
.CommandType = adCmdText
If frminicial.txtemp = [Ô]170[Ô] Then
.CommandText = [Ô]SELECT vendas.cliente, cliente.nome, cliente.cidade, cliente.codigo, Last(vendas.data) AS ultima_compra, cliente.bairro FROM cliente INNER JOIN vendas ON cliente.codigo = vendas.cliente GROUP BY vendas.cliente, cliente.nome, cliente.cidade, cliente.codigo, cliente.bairro HAVING (((Last(vendas.data))<= #[Ô] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [Ô]# ))order by 5 desc [Ô]
Set myrs = .Execute
ElseIf frminicial.txtemp = [Ô]190[Ô] Then
.CommandText = [Ô]SELECT vendas190.cliente, cliente190.nome, cliente190.cidade, cliente190.codigo, Last(vendas190.data) AS ultima_compra, cliente190.bairro FROM cliente190 INNER JOIN vendas190 ON cliente190.codigo = vendas190.cliente GROUP BY vendas190.cliente, cliente190.nome, cliente190.cidade, cliente190.codigo, cliente190.bairro HAVING (((Last(vendas190.data))<= #[Ô] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [Ô]# )) order by 5 desc[Ô]
Set myrs = .Execute
End If
End With
Do Until myrs.EOF
Set newlist = lista.ListItems.Add(, [Ô] Key [Ô] & myrs([Ô]cliente[Ô]), myrs([Ô]cliente[Ô]))
newlist.SubItems(1) = [Ô][Ô] & myrs([Ô]nome[Ô])
newlist.SubItems(2) = [Ô][Ô] & myrs([Ô]bairro[Ô])
newlist.SubItems(3) = [Ô][Ô] & myrs([Ô]cidade[Ô])
newlist.SubItems(4) = Format(myrs!ultima_compra, [Ô]dd/mm/yyyy[Ô])
myrs.MoveNext
Loop
nitens = lista.ListItems.Count
Me.txtnumber = nitens
myrs.Close
Set myrs = Nothing
mycon.Close
End Sub
Agradeço muito a sua colaboração.
Att
Peço desculpas más, esqueci de avisa-lo que estou trabalhando com access 2007 e campos data/hora, sendo assim não aceita aspas simples.
O problema foi resolvido com o uso do having (alias).
segue o código resolvido:
Public Sub abre_data()
Dim scnn As String
Dim newlist As ListItem
Dim nitens As Integer
Dim dia As Date
lista.ListItems.Clear
dia = Now
mycon.ConnectionString = [Ô]provider=microsoft.jet.oledb.4.0;[Ô] & [Ô] data source=[Ô] & App.Path & [Ô]\db001\bc001.mdb[Ô]
mycon.Open
With mycmd
.ActiveConnection = mycon
.CommandType = adCmdText
If frminicial.txtemp = [Ô]170[Ô] Then
.CommandText = [Ô]SELECT vendas.cliente, cliente.nome, cliente.cidade, cliente.codigo, Last(vendas.data) AS ultima_compra, cliente.bairro FROM cliente INNER JOIN vendas ON cliente.codigo = vendas.cliente GROUP BY vendas.cliente, cliente.nome, cliente.cidade, cliente.codigo, cliente.bairro HAVING (((Last(vendas.data))<= #[Ô] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [Ô]# ))order by 5 desc [Ô]
Set myrs = .Execute
ElseIf frminicial.txtemp = [Ô]190[Ô] Then
.CommandText = [Ô]SELECT vendas190.cliente, cliente190.nome, cliente190.cidade, cliente190.codigo, Last(vendas190.data) AS ultima_compra, cliente190.bairro FROM cliente190 INNER JOIN vendas190 ON cliente190.codigo = vendas190.cliente GROUP BY vendas190.cliente, cliente190.nome, cliente190.cidade, cliente190.codigo, cliente190.bairro HAVING (((Last(vendas190.data))<= #[Ô] & Format(Me.txtdata, [Ô]mm/dd/yyyy[Ô]) & [Ô]# )) order by 5 desc[Ô]
Set myrs = .Execute
End If
End With
Do Until myrs.EOF
Set newlist = lista.ListItems.Add(, [Ô] Key [Ô] & myrs([Ô]cliente[Ô]), myrs([Ô]cliente[Ô]))
newlist.SubItems(1) = [Ô][Ô] & myrs([Ô]nome[Ô])
newlist.SubItems(2) = [Ô][Ô] & myrs([Ô]bairro[Ô])
newlist.SubItems(3) = [Ô][Ô] & myrs([Ô]cidade[Ô])
newlist.SubItems(4) = Format(myrs!ultima_compra, [Ô]dd/mm/yyyy[Ô])
myrs.MoveNext
Loop
nitens = lista.ListItems.Count
Me.txtnumber = nitens
myrs.Close
Set myrs = Nothing
mycon.Close
End Sub
Agradeço muito a sua colaboração.
Att
Quando eu fiz um relatório que tinha uma necessidade parecida, achei a saÃda na tabela temporária. Tipo um select do select.
Tópico encerrado , respostas não são mais permitidas