Ir para conteúdo

POWERED BY:

Arquivado

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

Guilherme Schimidt

Select em uma condição específica (PHP + SQL Server)

Recommended Posts

Primeiramente boa tarde. Então, eu tenho uma tabela que lista a compra de Produtos para empresa, nessa tabela tem um coluna com a ID do Produto e uma coluna com a Data de compra. Agora eu preciso de um código para selecionar as ID dos Produtos que estiverem dentro de um intervalo de datas que eu definir. A ID do Produto SÓ pode estar entre esse intervalo, se ele estiver nesse intervalo mas também tiver antes ou depois desse intervalo eu não posso selecioná-lo .

Eu já tentei de tudo, Select com Distinct e tudo mais, porém não consegui chegar em alguma solução. O meu php já está pronto, porém não consigo fazer o select correto para pegar somente esses valores.

Alguém pode ajudar? Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
... Agora eu preciso de um código para selecionar as ID dos Produtos que estiverem dentro de um intervalo de datas ...

 

 

Use BETWEEN

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que teria que usar o Between com o MAX para trazer o último registro por intervalo de data.

Teria como postar um exemplo dos dados ou a estrutura?

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou DISTINCT , algo como ...

 

SELECT DISTINCT COD_PRODUTO

FROM COMPRAS

WHERE DATA_COMPRA BETWEEN '01/09/2014' AND '23/09/14'

 

Com a atenção paraa conversão de data que eu aqui ignorei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou DISTINCT , algo como ...

 

SELECT DISTINCT COD_PRODUTO

FROM COMPRAS

WHERE DATA_COMPRA BETWEEN '01/09/2014' AND '23/09/14'

 

Com a atenção paraa conversão de data que eu aqui ignorei.

Então, esse select com distinct e between eu fiz, porém eu não posso pegar um produto que esteja nesse período mas tbm esteja fora, e é o que acaba acontecendo. Agora como funciona esse com MAX?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, eu criei uma tabela para ilustrar, o meu Select deve pegar os produtos que tiverem a última data de compra entre o período de 17/08/2014 a 19/08/2014, então os produtos que devem ser selecionados são os em vermelho apenas.

rUgbsju.jpg

P.S: Desculpe pelo tamanho da tabela, não consegui redimensioná-la aqui..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste exemplo esta demonstrando somente os produtos que precisa:

 

 

 
declare @produto table (codigoproduto int, datacompra datetime)
 
insert into @produto values (1,'2014-08-19')
insert into @produto values (1,'2014-08-20')
insert into @produto values (1,'2014-08-21')
 
insert into @produto values (2,'2014-08-18')
insert into @produto values (2,'2014-08-19')
 
insert into @produto values (3,'2014-08-17')
 
insert into @produto values (4,'2014-08-17')
 
insert into @produto values (5,'2014-08-16')
insert into @produto values (5,'2014-08-17')
 
insert into @produto values (6,'2014-08-15')
 
 
select * from @produto 
where datacompra between '2014-08-17' and '2014-08-19'
 

O exemplo com o Max será necessário somente se quiser trazer UM produto, ou seja, se neste intervalo de datas tiver dois códigos de produto = 1 por exemplo.

 

Veja se é seu caso.

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites
que tiverem a última data de compra entre o período

 

 

Se vc tem a ultima data de compra em compra na tabela de produtos é a solução do post #8 do a.Jr. , se não precisará de algo do tipo

 

--maximas compras

select idproduto , max(datacompra)
from compras
where datacompra between '2014-08-17' and '2014-08-19'

--produtos nesta lista

select *
from produtos ,
       (select idproduto , max(datacompra)
        from compras
        where datacompra between '2014-08-17' and '2014-08-19') maxcompras
where produtos.idprotudo = maxcompras.idprodutos

Compartilhar este post


Link para o post
Compartilhar em outros sites

qqer coisa, retorne com o tipo da coluna e versão do sql server.

2008 e mais recentes utilizam o formato timestamp.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema resolvido, meu código ficou assim:

"SELECT L1.* FROM Produtos_Fornecedores As L1
                                    INNER JOIN (
                                    SELECT Produto, MAX(Data) As UltimaData
                                    FROM Produtos_Fornecedores GROUP BY Produto) As L2
                                    ON L1.Produto = L2.Produto AND L1.Data = L2.UltimaData WHERE Data between convert(datetime, '$data1') and convert(datetime, '$data2')
                                    "

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.