ULTIMA DATA COM WHERE

ARES 08/02/2011 17:58:51
#364732
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.
NLSOLUCOES 08/02/2011 20:03:44
#364745
>
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

<

ARES 09/02/2011 09:14:41
#364797
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

KIKO.WIZZ 09/02/2011 09:15:44
#364798
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