Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Contar Fechas

Estas en el tema de Contar Fechas en el foro de Mysql en Foros del Web. Buenos dias Compañeros de foros de web, tengo una duda que no se como resolver les comento: Tengo una tabla con aproximadamente 25000 registros, los ...
  #1 (permalink)  
Antiguo 30/03/2011, 07:02
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Contar Fechas

Buenos dias Compañeros de foros de web, tengo una duda que no se como resolver
les comento:

Tengo una tabla con aproximadamente 25000 registros, los cuales tienen la fecha de ingreso del registro a laa base de datos. Hay registros que tienen la misma fecha, lo que intento hacer es contar los registros de la tabla pero solamente una fecha, por ejemplo:

10-01-2011
10-01-2011
10-01-2011
12-01-2011
12-01-2011
13-01-2011
14-01-2011
14-01-2011

la idea que quiero es que con el COUNT me devuelve (3, 2, 1, 2) que son los registros por fecha ya que estoy agrupando por fecha y lo que quiero es que no me cuenta las fechas repetidas y que el resultado sea 4.

Espero haberme explicado y puedan ayudarme con esto
  #2 (permalink)  
Antiguo 30/03/2011, 07:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Contar Fechas

Código MySQL:
Ver original
  1. SELECT COUNT(DISTINCT fecha) FROM tabla;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 30/03/2011, 07:33
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Contar Fechas

Hola gnzsoloyo y gracias por responder, con ese codigo lo que me devuelve el COUNT es el valor 1 por cada Registro, es decir tengo 5 fechas distintas y me devuelve 1 por cada Fecha, quiero que me devuelva 5 que seria el total de Fechas, no se si me explique bien

saludos
  #4 (permalink)  
Antiguo 30/03/2011, 07:45
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Contar Fechas

Hola, Tambien probe esto:

Código PHP:

$dias
=mysql_query("SELECT MOV_FECHA FROM dpmovinv 
                            LEFT JOIN dpclientescero ON CCG_NUMDOC = DOC_NUMERO AND CCG_TIPDOC = DOC_TIPDOC AND CCG_CODSUC = DOC_CODSUC
                            LEFT JOIN dpdoccli ON DOC_NUMERO = MOV_DOCUME AND DOC_TIPDOC = MOV_TIPDOC
                            LEFT JOIN dpinv ON INV_CODIGO = MOV_CODIGO
                            INNER JOIN dpcla ON CLA_CODIGO = INV_CLA
                            INNER JOIN dpfamilias ON FAM_CODIGO = INV_FAM
                            INNER JOIN dpgru ON GRU_CODIGO = INV_GRUPO
                            WHERE FAM_DESCRI = '$tipos_corte' AND MOV_FECHA >= '$fecha_inicial' AND MOV_FECHA <= '$fecha_final' 
                            AND DOC_NUMERO = MOV_DOCUME AND DOC_TIPDOC = MOV_TIPDOC AND INV_CODIGO = MOV_CODIGO AND CCG_NUMDOC = DOC_NUMERO 
                            AND CCG_TIPDOC = DOC_TIPDOC AND CCG_CODSUC = DOC_CODSUC AND GRU_CODIGO = INV_GRUPO
                            AND FAM_CODIGO = INV_FAM AND CLA_CODIGO = INV_CLA AND ((DOC_TIPTRA='D') AND (MOV_INVACT=1) 
                            AND (MOV_APLORG='V'))
                           GROUP BY MOV_FECHA"
); //Quiery de Consulta
    
    
$days_work mysql_fetch_array($dias);
    
    
$total_dias array_count_values($days_work);

echo 
$total_dias
Y me da error de Parametro con el array_count_values
  #5 (permalink)  
Antiguo 30/03/2011, 07:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Contar Fechas

Cita:
Iniciado por mixzplit Ver Mensaje
Hola gnzsoloyo y gracias por responder, con ese codigo lo que me devuelve el COUNT es el valor 1 por cada Registro, es decir tengo 5 fechas distintas y me devuelve 1 por cada Fecha, quiero que me devuelva 5 que seria el total de Fechas, no se si me explique bien

saludos
La única forma en que COUNT(DISTINCT fecha) te puede devolver 1, es si agrupas por fecha. Si estás agrupando por fecha no puedes contar las diferentes, no es lógico.
Si lo que quieres es obtener el total, pero seguir agrupando por día, deberás agregar WITH ROLLUP al final del GROUP BY. Eso no eliminará la columna, pero te dará un registro de resumen por cada día y uno final con el total.
El problema se produce porque estás tratando de hacer en una sola consulta cosas incompatibles.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 30/03/2011, 09:02
 
Fecha de Ingreso: enero-2011
Ubicación: Maracaibo
Mensajes: 179
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Contar Fechas

Hola gnzsoloyo, la sentencia SQL me funciono bien asi como esta aqui, me devuelve el valor que quiero, el problema ahora es que en PHP me devuelve vacio, no se como hacer para mostrar el valor dentro de un echo


Código PHP:
$dias=mysql_query("SELECT COUNT(DISTINCT MOV_FECHA) as 'FECHA' FROM dpmovinv 
                            LEFT JOIN dpclientescero ON CCG_NUMDOC = DOC_NUMERO AND CCG_TIPDOC = DOC_TIPDOC AND CCG_CODSUC = DOC_CODSUC
                            LEFT JOIN dpdoccli ON DOC_NUMERO = MOV_DOCUME AND DOC_TIPDOC = MOV_TIPDOC
                            LEFT JOIN dpinv ON INV_CODIGO = MOV_CODIGO
                            INNER JOIN dpcla ON CLA_CODIGO = INV_CLA
                            INNER JOIN dpfamilias ON FAM_CODIGO = INV_FAM
                            INNER JOIN dpgru ON GRU_CODIGO = INV_GRUPO
                            WHERE FAM_DESCRI = '$tipos_corte' AND MOV_FECHA >= '$fecha_inicial' AND MOV_FECHA <= '$fecha_final' 
                            AND DOC_NUMERO = MOV_DOCUME AND DOC_TIPDOC = MOV_TIPDOC AND INV_CODIGO = MOV_CODIGO AND CCG_NUMDOC = DOC_NUMERO 
                            AND CCG_TIPDOC = DOC_TIPDOC AND CCG_CODSUC = DOC_CODSUC AND GRU_CODIGO = INV_GRUPO
                            AND FAM_CODIGO = INV_FAM AND CLA_CODIGO = INV_CLA AND ((DOC_TIPTRA='D') AND (MOV_INVACT=1) 
                            AND (MOV_APLORG='V')) GROUP BY 'FECHA'"
); //Quiery de Consulta
    
    
$days_work mysql_fetch_array($dias);
    echo 
$days_work[0]; 
Espero puedas ayudarme con esto,

Saludos
  #7 (permalink)  
Antiguo 30/03/2011, 09:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Contar Fechas

El GROUP BY sólo puede tener nombres de alias, columnas reales o bien enteros que representen posiciones. Le estás poniendo una cadena de texto.
Además de eso, en la consulta que pones tienes condiciones redundantes (las del FROM ya contemplan las del WHERE), que no producen ningún efecto.
Otros detalles son que si tienes un rango que comparar, es mejor usar BETWEEN y no operadores, y que si todas las condiciones dentro de un paréntesis son AND, el paréntesis es innecesario. Diferente sería si hubiese un OR.

Pruébalo así:
Código MySQL:
Ver original
  1.   COUNT(DISTINCT MOV_FECHA) FECHA
  2.       dpmovinv
  3.       LEFT JOIN dpclientescero ON CCG_NUMDOC = DOC_NUMERO AND CCG_TIPDOC = DOC_TIPDOC AND CCG_CODSUC = DOC_CODSUC
  4.       LEFT JOIN dpdoccli ON DOC_NUMERO = MOV_DOCUME AND DOC_TIPDOC = MOV_TIPDOC
  5.       LEFT JOIN dpinv ON INV_CODIGO = MOV_CODIGO
  6.       INNER JOIN dpcla ON CLA_CODIGO = INV_CLA
  7.       INNER JOIN dpfamilias ON FAM_CODIGO = INV_FAM
  8.       INNER JOIN dpgru ON GRU_CODIGO = INV_GRUPO
  9.       FAM_DESCRI = '$tipos_corte'
  10.       AND (MOV_FECHA BETWEEN '$fecha_inicial' AND MOV_FECHA <= '$fecha_final')
  11.       AND DOC_TIPTRA='D'
  12.       AND MOV_INVACT=1
  13.       AND MOV_APLORG='V'
  14. GROUP BY FECHA;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: fechas
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 14:19.