• Publicidad

Intervalo de fechas

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Intervalo de fechas

Notapor AgeValed » 2008-10-20 09:00 @417

Buenas. Estaba haciendo unas consultas en SQL y me trabé con una y no sé cómo hacerla. ¡¡Capaz que no es difícil pero no sé me ocurrió cómo hacerla!!

Lo que tengo que hacer es que me devuelva algo así...

Código: Seleccionar todo
Número de semana /  Bajas / Altas
1                      xx       xx
2                      xx       xx
3                      xx       xx
4                      xx       xx
5                      xx       xx


Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
FROM `usuario`
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Las fechas es desde el 2008-06-01 (no se le pasa la fecha sino que se le agrega) hasta el día de hoy.

La columna baja la cuenta de fechaterm y las de alta, de fechareg.

Tienen formato: $year."/".$mon."/".$mday." ".$hour.":".$min.":".$sec.

¡No sé como hacer que en una tabla vaya poniendo el número de semana!

Cualquier cosa avisen, ¡¡saludos!!



¡¡¡EDITO!!!

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
SELECT count(fechareg) AS Altas, count(fechaterm) AS baja FROM `usuario`
  WHERE fechareg >  (DATE_SUB('2008-06-01',INTERVAL 7 DAY) )
 OR fechaterm > ( DATE_SUB('2008-06-01',INTERVAL 7 DAY) );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Hice esto: hasta el momento me devuelve la cantidad de altas y bajas pero ¡¡no sé cómo hacer para que me devuelva por semana!! :(

¿¿Hay alguna forma de hacerlo o por código no más??

Saludos... Pablo
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Publicidad

Notapor kidd » 2008-10-20 09:32 @439

Por la sintaxis me imagino que estás en MySQL. En ese caso puedes usar la función WEEK() que te da el número de semana de una fecha.

Para versión 5.0:
http://dev.mysql.com/doc/refman/5.0/en/ ... ction_week

Para versión 3 a 4:
http://dev.mysql.com/doc/refman/4.1/en/ ... ction_week

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor AgeValed » 2008-10-20 09:49 @450

Según entendí eso te devuelve el número de semana del año, pero lo que necesito es que cuente en donde dice "numero de semana" el primero sea la fecha 2008-06-01 de ahí cada 7 días va sumando uno y va contando de nuevo.

ejemplo:
Código: Seleccionar todo
del dia 2008-06-01 al 2008-06-08 hubieron 4 bajas 10 altas
del dia 2008-06-09 al 2008-06-16 hubieron 5 bajas 5 altas


pero vos ves un listado de los usuarios que tienen fechareg = (fecha que se reg) y fechaterm (null si no se dio de baja o una fecha si se dio de baja)
....

quedaría

Código: Seleccionar todo
semana - bajas - alta
1 - 4 - 10
2 - 5 - 5


lo que va en semana sería como un contador...

Saludos... (espero que se haya entendido)
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Notapor kidd » 2008-10-20 10:39 @485

Ya entiendo, ¿podrías poner la estructura que tienes actualmente en tu tabla?
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor AgeValed » 2008-10-20 11:05 @503

La tabla usuario tiene los datos de usuarios como id, nombre, usuario, email, etc.... Las que valen la pena ahí serían fechareg y fechaterm (el tipo de ambas es timestamp).

Con el código que puse arriba me devuelve solo

Código: Seleccionar todo
Altas / Bajas
xxx / xxx


(el total de altas y bajas que hay) pero me gustaría que por lo menos me diga

Código: Seleccionar todo
altas / bajas
xx / xx
xx / xx
xx / xx


cada 7 días. Humm, ese es el problema, ya que si por lo menos me devuelve eso el resto lo puedo hacer con código Perl.

No sé si necesitarás algún dato más.
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Notapor Jenda » 2008-10-20 19:30 @854

Algo así (no tengo tiempo para buscar la sintaxis exacta en MYSQL) debería funcionar:

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
SELECT A.Semana, A.Altas, B.Bajas
FROM (
 SELECT Convert( int, DateDiff( day, '2008-06-01', fechaterm)) AS Semana, count(*) AS Altas
 FROM `usuario`
 GROUP BY Convert( int, DateDiff( day, '2008-06-01', fechaterm))
) AS A
OUTER JOIN (
 SELECT Convert( int, DateDiff( day, '2008-06-01', fechareg)) AS Semana, count(*) AS Bajas
 FROM `usuario`
 GROUP BY Convert( int, DateDiff( day, '2008-06-01', fechareg))
) AS B ON A.Semana = B.Semana
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
-------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas :-)
Jenda
Perlero nuevo
Perlero nuevo
 
Mensajes: 132
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa

Notapor AgeValed » 2008-10-21 06:39 @318

Gracias, ahora veo cómo sería el convert en MySQL. Si alguien me tira una ayudita se lo agradecería :$

Acá está cómo sería pero no entendí mucho:
http://dev.mysql.com/doc/refman/5.0/en/ ... nvert.html

Probé:
Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
Convert( DateDiff( day, '2008-06-01', fechaterm) USING int)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y me tira error.

Saludos... Pablo
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Notapor explorer » 2008-10-21 07:06 @337

convert se refiere al cambio de conjuntos de caracteres. No tiene nada que ver con cambiar fechas a enteros.

Lo más parecido que quieres hacer es la función WEEK():
http://dev.mysql.com/doc/refman/5.0/en/ ... ction_week
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor Jenda » 2008-10-21 07:14 @343

http://dev.mysql.com/doc/refman/5.0/en/ ... tions.html

Y actualmente vas a tener que dividir el resultado de DateDiff() por 7. Yo olvidé añadir esto en el código.

Y parece que el DateDiff() en MySQL no soporta el parámetro que specifica si quieres saber cuántas horas/días/semanas/meses/años hay entre las dos fechas. http://dev.mysql.com/doc/refman/5.0/en/ ... n_datediff
Última edición por Jenda el 2008-10-21 07:21 @347, editado 1 vez en total
-------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas :-)
Jenda
Perlero nuevo
Perlero nuevo
 
Mensajes: 132
Registrado: 2007-10-29 06:31 @313
Ubicación: Praga, Republica Checa

Notapor AgeValed » 2008-10-21 07:17 @345

Gracias explorer, pero como dije antes no quiero que dada una fecha me devuelva el número de semana que corresponde al año.

Ahora estoy tratando de que simplemente la consulta me devuelva

Código: Seleccionar todo
altas / bajas
xx / xx
xx / xx
xx / xx


(cada renglón una semana distinta) sin número, ya que el resto lo puedo hacer con Perl. Estaba pensado hacer una llamada desde Perl entre fechas, pero no sé cómo a una fecha (2008-09-22) sumarle 7 días y que quede bien :D
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Siguiente

Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados