Ir para conteúdo

Arquivado

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

Adriano MSB

[Resolvido] Select com função MIN

Recommended Posts

Pessoal imaginem uma tabela mais ou menos assim

 

Id Nome Valor Inicio Fim Tipo

1 Superior 2000 10/10/2008 10/10/2009 1

2 Especial 4000 11/10/2008 11/10/2009 1

3 Luxo 3000 12/10/2008 12/10/2009 2

4 Standard 1000 13/10/2008 13/10/2009 2

5 Extra 1000 14/10/2008 15/10/2009 3

 

Como eu teria que elaborar um select que me retornasse todos os campos apenas do registro que possui o menor valor respeitando o agrupamento da coluna tipo.

 

meu retorno teria que ser assim

 

Id Nome Valor Inicio Fim Tipo

1 Superior 2000 10/10/2008 10/10/2009 1

4 Standard 1000 13/10/2008 13/10/2009 2

5 Extra 1000 14/10/2008 15/10/2009 3

 

 

Se alguem puder ajudar eu agredeceria muito,

 

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas como você quer definir quais valores vão entrar????

 

pois poderia usar

select * from tabela
where valor between 1000 and 2000

ou fazer uma consulta

select * from tabela
where valor < select valor from tabela where valor .....)

Compartilhar este post


Link para o post
Compartilhar em outros sites

a regra é retornar todos os campos do registro que a colunar Valor tiver seu menor numero agrupando pela coluna tipo

 

Id Nome Valor Inicio Fim Tipo

1 Superior 2000 10/10/2008 10/10/2009 1

esse registro entrou porque a coluna valor tem o menor numero dentre todos os registro em que a coluna tipo é = 1

 

4 Standard 1000 13/10/2008 13/10/2009 2

esse registro entrou porque a coluna valor tem o menor numero dentre todos os registro em que a coluna tipo é = 2

 

5 Extra 1000 14/10/2008 15/10/2009 3

esse registro entrou porque é o unico que a coluna tipo é igual a 3, se houvesse outro registro em que a coluna tipo fosse igual a 3 eu teria que retornar o que tivesse o menor valor entre eles.

 

Estou usando bd Oracle

 

esperam que tenha entendido minha duvida.

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

tenta assim

 

select * from tabela 
where (id, valor) in (
select id, min(valor) from tabela
group by id)

Compartilhar este post


Link para o post
Compartilhar em outros sites

select *

from tabela a

where a.valor = (select min(valor)

from tabela b

where b.tipo = a.tipo)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Motta, baseado nesse link que voce colocou encontrei a luz para meu problema.

 

Agradeço a todos que tentaram me ajudar.

 

Obrigado.

 

Meu select ficou assim.

SELECT
	ID_FOR,
	LOJA_ID,
	VEICULO_ID,
	TARIFA_ID,
	TARIFA_CODE,
	TARIFA_NOME,
	TARIFA_DESC,
	ID_MOEDA,
	CD_MOEDA,
	SIG.PKG_CAD_FOR_VEHI_TARIFAS.FN_GET_VALOR_TARIFA(TARIFA_ID, P_DTF - P_DTI) VLR_TOTAL
FROM
	VW_CAD_FOR_VEHI_TARIFAS A
WHERE
	LOJA_CID_ID = P_ID_CIDADE AND
	ID_REG_VEIC IN (SELECT COLUMN_VALUE FROM TABLE(FN_SYS_SPLIT(SIG.PKG_CAD_FOR_VEHI_TARIFAS.FN_GET_REGIAO(P_ID_CIDADE)))) AND
	ID_REG_TAR IN (SELECT COLUMN_VALUE FROM TABLE(FN_SYS_SPLIT(SIG.PKG_CAD_FOR_VEHI_TARIFAS.FN_GET_REGIAO(P_ID_CIDADE)))) AND
	
	SIG.PKG_CAD_FOR_VEHI_TARIFAS.FN_GET_VALOR_TARIFA(TARIFA_ID, P_DTF - P_DTI) = 
	(
	SELECT
		MIN(SIG.PKG_CAD_FOR_VEHI_TARIFAS.FN_GET_VALOR_TARIFA(TARIFA_ID, P_DTF - P_DTI))
	FROM
		VW_CAD_FOR_VEHI_TARIFAS B
	WHERE
		LOJA_CID_ID = P_ID_CIDADE AND
		ID_REG_VEIC IN (SELECT COLUMN_VALUE FROM TABLE(FN_SYS_SPLIT(SIG.PKG_CAD_FOR_VEHI_TARIFAS.FN_GET_REGIAO(P_ID_CIDADE)))) AND
		ID_REG_TAR IN (SELECT COLUMN_VALUE FROM TABLE(FN_SYS_SPLIT(SIG.PKG_CAD_FOR_VEHI_TARIFAS.FN_GET_REGIAO(P_ID_CIDADE)))) AND		
		A.ID_FOR = B.ID_FOR AND
		A.LOJA_ID = B.LOJA_ID AND
		A.VEICULO_ID = B.VEICULO_ID
	)	
GROUP BY
	ID_FOR,
	LOJA_ID,
	VEICULO_ID,
	TARIFA_ID,
	TARIFA_CODE,
	TARIFA_NOME,
	TARIFA_DESC,
	ID_MOEDA,
	CD_MOEDA

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.