Foros del Web » Programando para Internet » ASP Clásico »

Agrupando Rangos

Estas en el tema de Agrupando Rangos en el foro de ASP Clásico en Foros del Web. Tengo un listado de usuarios que al registrarse ingresan el año de nacimiento, la idea es poder presentar una estadistica de los usuarios por la ...
  #1 (permalink)  
Antiguo 02/07/2003, 18:50
Avatar de Eutheola  
Fecha de Ingreso: enero-2002
Mensajes: 70
Antigüedad: 22 años, 5 meses
Puntos: 0
Agrupando Rangos

Tengo un listado de usuarios que al registrarse ingresan el año de nacimiento, la idea es poder presentar una estadistica de los usuarios por la edad, pero para que sea más entendible quiero presentarla en grupos, con una consulta tipica puedo saber cuantos registros son de 1070, cuantos de 1980..etc.

Como puedo hacer una consulta a un BD access que me traiga las edades en grupos o rangos:

1970-1980=23 registros
1981-1990=12 registros
etc...

Alguna Idea
__________________
"Nuestro conocimiento es necesariamente finito, mientras que nuestra ignorancia es necesariamente infinita."

Popper, Karl Raimund


  #2 (permalink)  
Antiguo 03/07/2003, 00:27
Avatar de Cauchemar  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 137
Antigüedad: 21 años
Puntos: 0
Hmm supongo que access admitira la instrucion Between

Select * from T_tabla where campo between valorinicio and valorfin
__________________
La utopía está en el horizonte: cuando yo camino dos pasos ella se aleja dos pasos. Yo camino diez pasos y ella está diez pasos más lejos ¿Para qué sirve la utopía?. Sirve para eso: para caminar.
  #3 (permalink)  
Antiguo 03/07/2003, 05:29
Avatar de AlexNV  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 289
Antigüedad: 21 años
Puntos: 1
Usa la funcion PARTITION
Es una función agregada de SQL de Jet.

Supon que tienes la Tabla1 con estos datos:
nombre ano
x 1970
c 1971
f 1972
d 1973
f 1980
x 1983
f 1992

SELECT Partition([ano],1970,2010,10) as Rango, Count(Nombre) as NumerodeUsuarios
FROM Table1
GROUP BY Partition([ano],1970,2010,10)

te devolvería:
Rango NumerodeUsuarios
1970:1979 4
1980:1989 2
1990:1999 1



La sintaxis es Partition(campo, inicio, fin, intervalo)

Espero que te sirva.
  #4 (permalink)  
Antiguo 03/07/2003, 10:55
Avatar de Eutheola  
Fecha de Ingreso: enero-2002
Mensajes: 70
Antigüedad: 22 años, 5 meses
Puntos: 0
Muy bien AlexNV lo probare! y te comento
__________________
"Nuestro conocimiento es necesariamente finito, mientras que nuestra ignorancia es necesariamente infinita."

Popper, Karl Raimund


  #5 (permalink)  
Antiguo 03/07/2003, 21:07
Avatar de Eutheola  
Fecha de Ingreso: enero-2002
Mensajes: 70
Antigüedad: 22 años, 5 meses
Puntos: 0
Funciona OK en Access pero al correrlo en .asp no es posible tengo este medio codigo pero no se donde esta la falla, agracezco aportes:

<HTML>
<TITLE> Rango de edades</TITLE>
<BODY>
<%
strconn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("database/paginar.mdb") & ";Persist Security Info=False"
set cnn = CreateObject("ADODB.Connection")
cnn.Open strconn%>
<H3>Rangos de Edad</H3>

<%

SQL = "SELECT Partition(Registro.Edad,17,80,10) AS Rango, Count(Nombre) AS NumerodeUsuarios FROM Registro GROUP BY Partition(Registro.Edad,17,80,10)" %>

<CENTER>
<TABLE BORDER=0 bgcolor="#cccc99">
<TR>
<TH> <font face="verdana" size="1">Rango</FONT> </TH>
<TH> <font face="verdana" size="1">No Usuarios</FONT> </TH>

<% DO UNTIL rs.Eof %>
<TR>

<TD vAlign=top align=middle bgColor=#e6ebfb> <font face="verdana" size="1"><%= rs("Rango") %></font></TD>
<TD vAlign=top align=middle bgColor=#e6ebfb> <font face="verdana" size="1"><%= rs("NumerodeUsuarios") %></font></TD>


<% rs.MoveNext
LOOP
rs.Close
Conn.Close %>
<TR>
</TABLE>
</CENTER>
</BODY>
</HTML>
__________________
"Nuestro conocimiento es necesariamente finito, mientras que nuestra ignorancia es necesariamente infinita."

Popper, Karl Raimund


  #6 (permalink)  
Antiguo 03/07/2003, 22:35
Avatar de Eutheola  
Fecha de Ingreso: enero-2002
Mensajes: 70
Antigüedad: 22 años, 5 meses
Puntos: 0
Mientras se soluciona lo del codigo...es posible que en el select:

SELECT Partition(Registro.Edad,17,80,10) AS Rango, Count(Nombre) AS NumerodeUsuarios FROM Registro GROUP BY Partition(Registro.Edad,17 ,80 ,10)

Los valores extremo del rango sean "buscados", es decir algo asi como Min(Registro.Edad) o algoa asi?. Esto ya que no se sabra cual podra ser el valor maximo o minimo de los registros en un instante dado.

ME explique?
__________________
"Nuestro conocimiento es necesariamente finito, mientras que nuestra ignorancia es necesariamente infinita."

Popper, Karl Raimund


  #7 (permalink)  
Antiguo 04/07/2003, 03:26
Avatar de AlexNV  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 289
Antigüedad: 21 años
Puntos: 1
No te preocupes por los valores maximos y minimos.
Ponle un mínimo muy bajo y un máximo muy alto. Los rangos en los que no haya valores, no aparecerán.

En mi ejemplo anterior, si le hubiera puesto desde 1500 hasta 3000, el resultado hubiera sido el mismo.

Respecto al error de código parece que es porque no has seteado ni abierto el objeto rs. Solo inicializaste la variable SQL.

Un saludo.
  #8 (permalink)  
Antiguo 04/07/2003, 21:30
Avatar de Eutheola  
Fecha de Ingreso: enero-2002
Mensajes: 70
Antigüedad: 22 años, 5 meses
Puntos: 0
What? no comprendo. Como lo haria en el codigo? Que debo cambiar ?

Gracias por lo de los max y min. no tiene sentido preocuparse por algo que es innecesario.

__________________
"Nuestro conocimiento es necesariamente finito, mientras que nuestra ignorancia es necesariamente infinita."

Popper, Karl Raimund



Última edición por Eutheola; 05/07/2003 a las 10:04
  #9 (permalink)  
Antiguo 05/07/2003, 14:53
Avatar de AlexNV  
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 289
Antigüedad: 21 años
Puntos: 1
TE FALTA UN

RS.OPEN SQL, CNN

ANTES DEL DO WHILE.
  #10 (permalink)  
Antiguo 05/07/2003, 17:25
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 3 meses
Puntos: 535
mmm.. además, creo que está falatando crear una instancia del recordset, no?

set rs = CreateObject("ADODB.Recordset")
__________________
...___...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:10.