SELECT BY FREQUENCY

06/09/2005 - 18:34 por colt clint | Informe spam
Holla!


Mi mensaje es simple y corta.

Yo tengo una base de datos así:

columna1 columna2
1 34
1 12
1 8
1 1
2 19
2 17
2 11
3 12
3 5


etc.


Yo preciso de su ayuda para construir un SELECT por 2 de las freqcuencias
mayores (columna2) con base en la columna1

Gracias por su ayuda

Colt



-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa

Preguntas similare

Leer las respuestas

#6 colt clint
06/09/2005 - 23:22 | Informe spam
Estimado Espartaco,


Sin problemas.

Datos de entrada:

columna1 columna2 column3
1 34 2
1 12 2
1 8 2
1 1 2
2 19 3
2 17 3
2 11 3
2 9 3
3 22 3
3 15 3
3 13 3
3 8 3
4 18 1
4 5 1

Datos de salida:

columna1 columna2 columna3

1 34 2
1 12 2
2 19 3
2 17 3
2 11 3
3 22 3
3 15 3
3 13 3
4 18 1


1. La colunna3 y la columna1 tienen una estrecha (directa) relacion.
2. Asi, deben ser selecionados tantos elementos de la columna2 (siempre
los mayores, claro) de acuerdo acuerdo con el valor de la columna3.

Vale?

Saludos

Colt




PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#7 colt clint
07/09/2005 - 00:25 | Informe spam
Muchas Gracias.

Para clarear una coisa:

id= columna1
cantidad = columna2
valor=colunna3

Vale?

Saludos

Colt

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
Respuesta Responder a este mensaje
#8 Esparta Palma
07/09/2005 - 00:26 | Informe spam
Porqué no nos envías un conjunto de datos de entrada, así como un
conjunto de datos de salida (supuestos) porque la mera verdad no entendí
el cómo está estructurados tus campos (y/o porqué).

¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/
http://www.espartha.com/blog/

colt clint wrote:
Espartaco,

Muchas gracias. El script es lo que me gustaría ver.

Así, me parece, no sería dificil para Ud. ayudarme un poquito más. Extraer
la maior frecuencia, es útil, pero tiene limitaciones. En el ejemplo abajo
puedes ver que hay una 3a columna.

Esta 3a columna es lo que indica cuántas líneas de la columna 2 deveb ser
selecionadas. Yo creo que es muy dificil. En otros forums no tuvo
respuesta.

Según este ejemplo, serían seleccionado todos mayores (más altos) items
de la columa3 = 2 teniendo como base la columna 1. Más o menos así:

Ejemplo:
SELECT TOP 2 * FROM tableyy WHERE columna3 = 2 and columna1 = 1 GROUP BY
columns3 ORDER BYcolumna3 DESC

SELECT TOP 3 * FROM tableyy WHERE columna3 = 3 and columna1 =2 GROUP BY
columns3 ORDER BYcolumna3 DESC

SELECT TOP 1 * FROM tableyy WHERE columna3  and columna1 =4 GROUP BY
columns3 ORDER BYcolumna3 DESC

columna1 columna2 column3
1 34 2
1 12 2
1 8 2
1 1 2
2 19 3
2 17 3
2 11 3
3 12 3
3 5 3
4 18 1
4 5 1


Es posible hacer algo más resumido?

Gracias más una vez

Saludos

Colt


PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
#9 colt clint
07/09/2005 - 00:54 | Informe spam
Espartaco,

Muchas gracias.

También pienso que así será muy dificil de hacer las cosas. Yo tengo otra
idea más prática, para trabajar solamente con 2 columnas, pero abriré otra
mensaje para poner esta.

Otra vez más, muchas gracias.

Saludos

Colt

-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
Respuesta Responder a este mensaje
#10 Esparta Palma
07/09/2005 - 01:36 | Informe spam
Pues así como lo veo no hay una forma directa de sacarlo con un solo
query, deberás hacer un barrido de cuántos elementos maximos deseas. Si
estuvieran normalizados sería más directo, pero aún así no hay problema:

** Primero sacar los IDs y los elementos que se desean:

SELECT DISTINCT iid, cantidad ;
FROM TuTabla INTO CURSOR cBase

*** Crear un cursor donde almacenaremos todos los máximos

CREATE CURSOR cResults (iid int, valor int)

*** Recorreremos el cursor de IDs y cantidad de máximos a obtener
SELECT "cBase"
SCAN
*** Creamos un cursor con la cantidad de máximos requeridos
*** en base de la tabla donde sacaremos los valores
SELECT TOP cBase.Cantidad iid, valor ;
FROM TuTabla ;
ORDER BY iid, valor DESC ;
WHERE iid = cBase.iID ;
INTO CURSOR cMaximos ;
NOFILTER
*** Seleccionamos el cursor que almacenará los datos para ...
SELECT "cResults"
*** ... Agregarle los datos que sacaremos uno a uno.
APPEND FROM DBF("cMaximos")
ENDSCAN

*** Cerrar los cursores que ya no utilizarás.

USE IN (SELECT("cBase"))
USE IN (SELECT("cMaximos"))

Espero te sirva.

¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º¤ø,¸¸,ø¤º°`°º

Espartaco Palma Martínez
SysOp http://www.PortalFox.com
México D.F.
MoBlogs!
http://weblogs.golemproject.com/esparta/
http://www.espartha.com/blog/

colt clint wrote:
Estimado Espartaco,


Sin problemas.

Datos de entrada:

columna1 columna2 column3
1 34 2
1 12 2
1 8 2
1 1 2
2 19 3
2 17 3
2 11 3
2 9 3
3 22 3
3 15 3
3 13 3
3 8 3
4 18 1
4 5 1

Datos de salida:

columna1 columna2 columna3

1 34 2
1 12 2
2 19 3
2 17 3
2 11 3
3 22 3
3 15 3
3 13 3
4 18 1


1. La colunna3 y la columna1 tienen una estrecha (directa) relacion.
2. Asi, deben ser selecionados tantos elementos de la columna2 (siempre
los mayores, claro) de acuerdo acuerdo con el valor de la columna3.

Vale?

Saludos

Colt




PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida