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

MAX=MIN en consulta, pero son distintos...

Estas en el tema de MAX=MIN en consulta, pero son distintos... en el foro de ASP Clásico en Foros del Web. Hola, salu2 a to2... Tengo un problemilla: cuando hago una consulta a una base de datos, para mostrar valores máximos y mínimos de visitas, me ...
  #1 (permalink)  
Antiguo 09/09/2004, 03:28
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
MAX=MIN en consulta, pero son distintos...

Hola, salu2 a to2...

Tengo un problemilla: cuando hago una consulta a una base de datos, para mostrar valores máximos y mínimos de visitas, me muestra el mismo valor (el valor del máximo nº de visitas, no solo en el máximo, sino también en el mínimo, cuando en realidad, los datos no son idénticos).

El código es este:

<TABLE>
<TR><TD>
<%
set rs3=Server.CreateObject("ADODB.Recordset")
SQL3="SELECT MAX(hits) AS maximasvisitas, fecha FROM visitantes GROUP BY fecha"
set rs3=oConn.Execute(SQL3)
%>
&nbsp; &nbsp; N° <B>m&aacute;ximo</B> de visitantes: (<%=rs3.Fields("fecha")%>)
</TD>
<TD ALIGN="RIGHT">
<%'Asignamos el recordset maximasvisitas, a una variable
'para usarla posteriormente
maximasvisitas=rs3("maximasvisitas")
%>
<%=FormatNumber(maximasvisitas,0,,,-1)%> visitantes &nbsp; &nbsp;
<%
rs3.Close
set rs3=nothing
%>
</TD></TR>
<TR><TD>
<%
set rs4=Server.CreateObject("ADODB.Recordset")
SQL4="SELECT MIN(hits) AS minimasvisitas, fecha FROM visitantes GROUP BY fecha"
set rs4=oConn.Execute(SQL4)
%>
&nbsp; &nbsp; N° <B>m&iacute;nimo</B> de visitantes: (<%=rs4.Fields("fecha")%>)
</TD>
<TD ALIGN="RIGHT">
<%'Asignamos el recordset minimasvisitas, a una variable
'para usarla posteriormente
minimasvisitas=rs4("minimasvisitas")
%>
<%=FormatNumber(minimasvisitas,0,,,-1)%> visitantes &nbsp; &nbsp;
<%
rs4.Close
set rs4=nothing
%>
</TD></TR>
</TABLE>

En la tabla en cuestión muestro esto:

N° máximo de visitantes: (aquí va la fecha de max.visitas) XXX visitantes
N° mínimo de visitantes: (aquí va la fecha de min.visitas) XXX visitantes

En ambos casos me devuelve el mismo resultado (valores máximos en ambos casos), cuando en realidad, las visitas mínimas están bastante por debajo de las máximas.

Gracias por vuestra colaboración...
  #2 (permalink)  
Antiguo 09/09/2004, 07:50
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Bueno, a simple vista veo que tienes agrupados los las consultas, pero nunca recorres el recorset, entonces no necesitas el agrupamiento. ¿no será algo por ahí?, checa la lógica.

Saludos
  #3 (permalink)  
Antiguo 09/09/2004, 08:17
Avatar de fer911  
Fecha de Ingreso: enero-2004
Ubicación: Saltillo, Coah
Mensajes: 65
Antigüedad: 20 años, 5 meses
Puntos: 3
Necesitas definir bien el SELECT porque te esta dando mas de un registro y tu estas tomando el primer registro del resultado ejemplo:

01/01/2004 70
02/01/2004 60
03/01/2004 45

Si esta fuera tu tabla de visitantes los dos SELECT que has definido te da exactamente lo mismo es decir los tres renglones pero como estas tomando sólo el primer registro pues es los mismo. podrias ordenarlo
order by hits asc para que el minimo quede en el primer renglon y
order by hits desc para que el màximo quede en el primer renglon

o definir de otra manera el SELECT o haciendo dos SELECT

tu sabras como te conviene

suerte
  #4 (permalink)  
Antiguo 10/09/2004, 01:20
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Efectivamente eso es lo que me ocurre, me devuelve el 1er registro, pues al agrupar por fechas, se muestran todas (cada fecha es única, y por tanto, no hay agrupamiento en realidad).

Me ayudais a solventar el asunto...

Intento meter en una misma sentencia sql, el máximo y el mínimo de los hits, pero haciendo eso, solo conseguiré el valor del campo hits, y necesito mostrar también el respectivo valor del campo fecha (el rs.fields), pero como la consulta no me lo trae (solo me trae un campo), no sé como solucionarlo.

¿Me echais un cable?.

Gracias miles!

PD: veo que me sobran un par de "set"...
  #5 (permalink)  
Antiguo 10/09/2004, 09:24
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Como te comentó fer911, en lugar de usar MAX o MIN, solo ordenalos y lee el primero:

SELECT hits AS maximasvisitas, fecha FROM visitantes ORDER BY hits DESC
SELECT hits AS minimasvisitas, fecha FROM visitantes ORDER BY hits ASC
  #6 (permalink)  
Antiguo 14/09/2004, 01:51
Avatar de 3pies
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Desde una destilería
Mensajes: 2.584
Antigüedad: 20 años, 6 meses
Puntos: 144
Gracias a Myakire y fer911...

Al final, y para que no me devolviera todo el recordset, teniendo que coger el primer registro, he hecho lo siguiente (un poco más lioso, pero que me devuelve dos registros, uno con el máx. y otro con el mín.):

SQL="SELECT * FROM visitantes WHERE fecha=(SELECT MAX(fecha) FROM visitantes WHERE hits=(SELECT MAX(hits) FROM visitantes)) UNION ALL SELECT * FROM visitantes WHERE fecha=(SELECT MAX(fecha) FROM visitantes WHERE hits=(SELECT min(hits) FROM visitantes))"
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 00:57.