Skip site navigation (1) Skip section navigation (2)

Re: Limitar filas en grupos

From: "Jorge Tornero" <jorge(dot)tornero(at)cd(dot)ieo(dot)es>
To:
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Limitar filas en grupos
Date: 2012-01-30 09:33:07
Message-ID: 7BDD1998D03D9A4B9DAD0038863D30AF2DE7CA@ieocadizb.cd.ieo.es (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Hola a todos,

La solución que ofreció Anthony me ha ido perfecta:

with alea as (
select row_number() over (partition by extract(month from fecha), ctalla(talla,'m')) as nrow, extract(month from fecha) as mes,extract(day from fecha) as dia,ctalla(talla,'m'),num,numorden,talla,peso from bio order by 2,4,1,random())
select
mes,dia,numorden,talla from alea where nrow<=17 order by 1,2,3;

La única duda que me queda es si la aleatoriedad está "garantizada". 

Saludos cordiales

Jorge Tornero


El 28/01/12 01:15, Anthony escribió: 

	El 27/01/2012 5:48, Jorge Tornero escribió: 

		Hola a todos,
		
		Tengo que hacer una selección al azar de una serie de individuos. Estos 
		individuos los categorizo por fecha de captura y  clase de talla 
		principalmente. Necesito tomar hasta 17 individuos por cada una de esas 
		clases de talla. La parte de selección al azar la tengo resuelta 
		(creo... quizá alguien la vea mal):
		
		Select extract(month from fecha), fecha, clase_talla, numero_individuo 
		from biologicos group by 1,2,3,4 order by 1,2,3,random();
		
		Ahora bien, dentro de las clases de talla tengo algunas con 2,3... x 
		individuos, número menor a 17 y otras con pongamos 20, 30, 60 
		individuos. Como os digo necesito tomar hasta 17 individuos por clase de 
		talla. En otras palabras:
		
		¿Es posible limitar el número de columnas devueltas por group by, al 
		estilo de LIMIT pero dentro de los grupos?
		
		Muchas gracias!!!
		
		
		Jorge Tornero
		Instituto Español de Oceanografía
		Centro Oceanográfico de Cádiz
		-
		Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
		Para cambiar tu suscripción:
		http://www.postgresql.org/mailpref/pgsql-es-ayuda
		
		
		Fin a la injusticia, LIBERTAD AHORA A NUESTROS CINCO COMPATRIOTAS QUE SE ENCUENTRAN INJUSTAMENTE EN PRISIONES DE LOS EEUU!
		http://www.antiterroristas.cu
		http://justiciaparaloscinco.wordpress.com
		  

	Mira te recomiendo que utilices CTE para eso con la clausula with y funciones ventanas
	
	with numeracion as (
	select 'tus atributos' , row_number() over (partition by 'tu agrupamiento o clase' ) as numero from 'tu tabla')
	
	select * from numeracion where numero<=17
	
	saludos 
	 
	<http://www.antiterroristas.cu/> 


In response to

pgsql-es-ayuda by date

Next:From: ruben avila galindoDate: 2012-01-30 20:02:43
Subject: Re: SSPI ODBC POSTGRES
Previous:From: Hellmuth VargasDate: 2012-01-28 20:45:15
Subject: Re: uptime

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group