SQL - SQL filtrar filas de un sub select

 
Vista:

SQL filtrar filas de un sub select

Publicado por Rodrigo Gonzàlez (1 intervención) el 11/12/2015 21:57:08
realicé la siguiente consulta, la cual me entrega la siguiente tabla. el cual quiero quedarme con solo los horarios cuya duración sea la máxima.

para el caso tendría que quedarme entonces:
laboral: Providencia
tiempo libre: Providencia
hogar: Providencia

f01_numero_a_region_municipio______horario_____duracion
84125715____3______Providencia_____hogar______747 <------ MAXIMA DE HOGAR
84125715____7______Curico__________hogar______602
84125715____13_____Huechuraba____ laboral_____335
84125715____13_____Estacion Central_laboral_______8
84125715____13_____Providencia_____laboral_____359 <------- NAXIMA DE LABORAL
84125715____13_____Renca__________laboral______21
84125715____7______Curico__________tiempo libre__38
84125715____14_____Lago Ranco_____tiempo libre__21
84125715____13_____Providencia_____tiempo libre__79 <------- MAXIMA DE TIEMPO LIBRE

de antemano les agradezco cualquier ayuda o noción que tengan para resolver este caso.

saludos.

consulta sql:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
select
	f01_numero_a, region, municipio, horario, sum(f01_duracion) as duracion from
(
 
	select f01_numero_a, region, municipio, f01_duracion,
	case
		when extract('hour' from f01_timestamp) in (9,10,11,12,13,14,15,16,17)
			and to_char(f01_timestamp, 'D') between 2 and 6 then 'laboral'
		when extract('hour' from f01_timestamp) in (18,19,20,21,22,23,24,0,1,2,3,4,5,6,7,8)
			and to_char(f01_timestamp, 'D') between 2 and 6 then 'hogar'
		when extract('hour' from f01_timestamp) in (18,19,20,21,22,23,24) and to_char(f01_timestamp, 'D') = 6 then 'tiempo libre'
		when to_char(f01_timestamp, 'D') =7 or to_char(f01_fecha, 'D') =1 then 'tiempo libre'
		else 'otro'
	end as horario
	from cdrvoice.refined_201511 as aa, catalogo_celdas_rich as bb
	where f01_fecha between '2015-11-10' and '2015-11-20' and f01_numero_a ='84125715'
	and aa.f01_antena_latitud_origen1=bb.lat and aa.f01_antena_longitud_origen1=bb.lon
	group by 1,2,3,4,5
)
as devtable group by 1,2,3,4
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Manuel
Val: 67
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

SQL filtrar filas de un sub select

Publicado por Manuel (29 intervenciones) el 11/12/2015 22:45:11
Si solo quieres los máximos de cada categoría, pues depende cuantos datos quieras... que por cierto la próxima vez a ver si haces el favor de subir en un CSV, archivo Excel, etc los ejemplos e indicas sobre que SGBD... Pero bueno, a lo que vamos, para obtener algo tipo:

1
2
3
4
horario	MáxDeduracion
hogar	747
laboral	359
tiempo libre	38
no necesitas tanta complicación, con una consulta estilo para usar en forma de subconsulta que te daría los datos de antes:
1
2
3
SELECT filtrarsub.horario, Max(filtrarsub.duracion) AS MáxDeduracion
FROM filtrarsub
GROUP BY filtrarsub.horario;
Aun así, creo que lo que piedes es esto:

1
2
3
4
5
6
7
SELECT filtrarsub.f01, filtrarsub.numero_a_region, filtrarsub.municipio, filtrarsub.horario, filtrarsub.duracion
FROM filtrarsub
WHERE filtrarsub.duracion IN (SELECT Max(filtrarsub.duracion) AS MáxDeduracion
FROM filtrarsub
WHERE (((filtrarsub.horario)=filtrarsub.horario))
GROUP BY filtrarsub.horario;
);
Cuyo resultado sería:
1
2
3
4
f01	numero_a_region	municipio	horario	duracion
84125715	3	Providencia	hogar	747
84125715	13	Providencia	laboral	359
84125715	7	Curico	tiempo libre	38
Si necesitas solo el municipio, pues solo sacas del select lo que no necesites y listo y sería más simple:

1
2
3
4
5
6
7
SELECT filtrarsub.municipio, filtrarsub.horario
FROM filtrarsub
WHERE (((filtrarsub.duracion) In (SELECT Max(filtrarsub.duracion) AS MáxDeduracion
FROM filtrarsub
WHERE (((filtrarsub.horario)=filtrarsub.horario))
GROUP BY filtrarsub.horario;
)));
con el resultado:

1
2
3
4
municipio	horario
Providencia	hogar
Providencia	laboral
Curico	tiempo libre

Que básicamente creo que es exactamente lo que pides... aunque no se para que tu lo complicabas tanto.

Aunque no estoy seguro de lo anterior, porque como ya he dicho antes, para este tipo de preguntas deberías haber subido un archivo con algunos datos de la table y no como lo pusiste...

hasta luego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar