2008-10-20 09:00 @417 |
|
|
AgeValed
Perlero Nuevo
|
Registrado: 2008-09-19 09:35 @441 Mensajes: 33
|
|
|
Intervalo de fechas
|
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: Número de semana / Bajas / Altas 1 xx xx 2 xx xx 3 xx xx 4 xx xx 5 xx xx Using sql Syntax Highlighting 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!!! 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) ); 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
|
2008-10-20 09:49 @450 |
|
|
AgeValed
Perlero Nuevo
|
Registrado: 2008-09-19 09:35 @441 Mensajes: 33
|
|
|
|
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: 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: 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)
|
2008-10-20 11:05 @503 |
|
|
AgeValed
Perlero Nuevo
|
Registrado: 2008-09-19 09:35 @441 Mensajes: 33
|
|
|
|
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: Altas / Bajas xxx / xxx (el total de altas y bajas que hay) pero me gustaría que por lo menos me diga Código: 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.
|
2008-10-20 19:30 @854 |
|
|
Jenda
Perlero Frecuente
|
Registrado: 2007-10-29 06:31 @313 Ubicación: Praga, Republica Checa Mensajes: 132
|
|
|
|
Algo así (no tengo tiempo para buscar la sintaxis exacta en MYSQL) debería funcionar: 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
_________________ -------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas
|
2008-10-21 06:39 @318 |
|
|
AgeValed
Perlero Nuevo
|
Registrado: 2008-09-19 09:35 @441 Mensajes: 33
|
|
|
|
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.htmlProbé: Using sql Syntax Highlighting Convert( DateDiff( day, '2008-06-01', fechaterm) USING int) y me tira error. Saludos... Pablo
|
2008-10-21 07:06 @337 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10261
|
|
|
|
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
|
2008-10-21 07:14 @343 |
|
|
Jenda
Perlero Frecuente
|
Registrado: 2007-10-29 06:31 @313 Ubicación: Praga, Republica Checa Mensajes: 132
|
|
|
|
http://dev.mysql.com/doc/refman/5.0/en/ ... tions.htmlY 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
_________________ -------------------------------------------------------
- Estoy aquí para practicar español. Si te ayudó mi respuesta ayudame con un mensaje privado sobre mis faltas por favor. Seguramente habrá muchas
Última edición por Jenda el 2008-10-21 07:21 @347, editado 1 vez en total
|
2008-10-21 07:17 @345 |
|
|
AgeValed
Perlero Nuevo
|
Registrado: 2008-09-19 09:35 @441 Mensajes: 33
|
|
|
|
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: 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 
|
2008-10-21 07:35 @358 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10261
|
|
|
|
No es muy complicado... Using perl Syntax Highlighting #!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use DateTime;
my $fecha = DateTime->new(
year => 2008,
month => 9,
day => 22,
);
for (1..10) {
print $fecha->ymd('-'), "\n";
$fecha->add(days => 7);
} Sale: Código: 2008-09-22 2008-09-29 2008-10-06 2008-10-13 2008-10-20 2008-10-27 2008-11-03 2008-11-10 2008-11-17 2008-11-24
_________________ JF^D Perl programming
|
2008-10-21 09:38 @443 |
|
|
AgeValed
Perlero Nuevo
|
Registrado: 2008-09-19 09:35 @441 Mensajes: 33
|
|
|
|
Tengo la fecha de otra forma. Lo que hice fue (capaz que le sea útil a alguien en un futuro...) Using perl Syntax Highlighting my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon++;
my $hoy = $year."/".$mon."/".$mday." ".$hour.":".$min.":".$sec;
my $fechaInicio = 1212289200;
my $suma = 7*24*60*60;
my $fechaU = $fechaInicio;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($fechaInicio);
$year += 1900;
$mon++;
my $inicio = $year."/".$mon."/".$mday." ".$hour.":".$min.":".$sec;
while ($fechaU <= time()) {
$fechaU += $suma;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($fechaU);
$year += 1900;
$mon++;
$fin = $year."/".$mon."/".$mday." ".$hour.":".$min.":".$sec;
#comandos varios!
$inicio = $fin;
} Un poco más rebuscado pero me sirve para lo que tengo que hacer... Al final terminé haciendo con Perl lo que iba a hacer con SQL, jajajá Gracias a todos por su ayuda.
|
2008-10-21 14:56 @664 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10261
|
|
|
|
La salida de Using perl Syntax Highlighting #!/usr/bin/perl -l
use strict;
use warnings;
use diagnostics;
my ($sec,$min,$hour,$mday,$mon,$year) = localtime;
$year += 1900;
$mon ++;
my $hoy = "$year/$mon/$mday $hour:$min:$sec";
my $fechaInicio = 1212289200;
my $suma = 7*24*60*60;
my $fechaU = $fechaInicio;
($sec,$min,$hour,$mday,$mon,$year) = localtime($fechaInicio);
$year += 1900;
$mon ++;
my $inicio = "$year/$mon/$mday $hour:$min:$sec";
print "Inicio: $inicio";
while ($fechaU <= time) {
$fechaU += $suma;
($sec,$min,$hour,$mday,$mon,$year) = localtime($fechaU);
$year += 1900;
$mon ++;
my $fin = "$year/$mon/$mday $hour:$min:$sec";
print "Fin: $fin";
#comandos varios!
$inicio = $fin;
} es Código: Inicio: 2008/6/1 5:0:0 Fin: 2008/6/8 5:0:0 Fin: 2008/6/15 5:0:0 Fin: 2008/6/22 5:0:0 Fin: 2008/6/29 5:0:0 Fin: 2008/7/6 5:0:0 Fin: 2008/7/13 5:0:0 Fin: 2008/7/20 5:0:0 Fin: 2008/7/27 5:0:0 Fin: 2008/8/3 5:0:0 Fin: 2008/8/10 5:0:0 Fin: 2008/8/17 5:0:0 Fin: 2008/8/24 5:0:0 Fin: 2008/8/31 5:0:0 Fin: 2008/9/7 5:0:0 Fin: 2008/9/14 5:0:0 Fin: 2008/9/21 5:0:0 Fin: 2008/9/28 5:0:0 Fin: 2008/10/5 5:0:0 Fin: 2008/10/12 5:0:0 Fin: 2008/10/19 5:0:0 Fin: 2008/10/26 4:0:0 Humm... es un poco más fea...  En cuestión de control de tiempos y fechas, siempre es recomendable usar DateTime. Otra forma es usar strftime() del módulo POSIX (que sí viene incluido de base) que nos puede ayudar a formatear la salida: Using perl Syntax Highlighting #!/usr/bin/perl -l
use strict;
use warnings;
use diagnostics;
use POSIX qw(strftime);
my $hoy = strftime '%F %T', localtime;
print "Hoy: $hoy";
my $fechaInicio = 1212289200;
my $suma = 7*24*60*60;
my $fechaU = $fechaInicio;
my $inicio = strftime '%F %T', localtime $fechaInicio;
print "Inicio: $inicio";
while ($fechaU <= time) {
$fechaU += $suma;
my $fin = strftime '%F %T', localtime $fechaU;
print "Fin: $fin";
#comandos varios!
$inicio = $fin;
} Sale: Código: Hoy: 2008-10-21 21:46:59 Inicio: 2008-06-01 05:00:00 Fin: 2008-06-08 05:00:00 Fin: 2008-06-15 05:00:00 Fin: 2008-06-22 05:00:00 Fin: 2008-06-29 05:00:00 Fin: 2008-07-06 05:00:00 Fin: 2008-07-13 05:00:00 Fin: 2008-07-20 05:00:00 Fin: 2008-07-27 05:00:00 Fin: 2008-08-03 05:00:00 Fin: 2008-08-10 05:00:00 Fin: 2008-08-17 05:00:00 Fin: 2008-08-24 05:00:00 Fin: 2008-08-31 05:00:00 Fin: 2008-09-07 05:00:00 Fin: 2008-09-14 05:00:00 Fin: 2008-09-21 05:00:00 Fin: 2008-09-28 05:00:00 Fin: 2008-10-05 05:00:00 Fin: 2008-10-12 05:00:00 Fin: 2008-10-19 05:00:00 Fin: 2008-10-26 04:00:00 A propósito... el día 26 marca una hora menos porque, justamente ese día, se produce el cambio de hora de invierno aquí en España.
_________________ JF^D Perl programming
|
2008-10-22 06:30 @312 |
|
|
AgeValed
Perlero Nuevo
|
Registrado: 2008-09-19 09:35 @441 Mensajes: 33
|
|
|
|
|
Gracias, lo mismo lo uso para hacer consultas en una DB ¡y ahí no influye! Lo mismo es muy bueno para tener en cuenta, ¡¡además queda un poco más lindo el código!!
Saludos...
|
|
Página 1 de 1
|
[ 14 mensajes ] |
|
| Reglas del Foro |
No puedes abrir nuevos temas en este Foro No puedes responder a temas en este Foro No puedes editar tus mensajes en este Foro No puedes borrar tus mensajes en este Foro No puedes enviar adjuntos en este Foro
|
|
Socializa |
 |
|