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

Problema con una consulta en mysql

Estas en el tema de Problema con una consulta en mysql en el foro de Mysql en Foros del Web. Hola a todos. Mi problema es el siguiente: Tengo una tabla (registros) con los siguientes campos: id, id_usuario, fecha(datatime) y estado. En esta tabla se ...
  #1 (permalink)  
Antiguo 17/05/2012, 14:36
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 11 años, 11 meses
Puntos: 0
Problema con una consulta en mysql

Hola a todos.
Mi problema es el siguiente:
Tengo una tabla (registros) con los siguientes campos: id, id_usuario, fecha(datatime) y estado.

En esta tabla se guarda el registro de entrada y salida de los empleados de una oficina,(son 4 al dia) ejemplo:

id id_usuario fecha estado
1 2 2010-08-30 09:00:39 0
9 2 2010-08-30 14:03:31 1
11 2 2010-08-30 16:30:29 0
44 2 2010-08-30 19:30:49 1

16 2 2010-09-30 09:01:09 0 <--este
92 2 2010-09-30 14:02:51 1
49 2 2010-09-30 16:37:19 0
33 2 2010-09-30 19:24:29 1

Necesito obtener la hora a la que entró y salió cada empleado el ultimo dia que trabajó, teniendo en cuenta que estado 0 es cuando entra y estado 1 cuando sale.
La consulta que hago es:

SELECT max( fecha )
FROM registros
WHERE id_usuario =2
AND estado =0
AND fecha >= '09:00:00';

Pero se me va a 2010-09-30 16:37:19 (la segunda vez que entra el empleado) y necesito cada una por separado.
1º 2010-09-30 09:01:09
---------------------------
2º 2010-09-30 14:02:51
---------------------------
3º 2010-09-30 16:37:19
---------------------------
4º 2010-09-30 19:24:29

Llevo 2 dias buscando en foros pero no lo consigo no se como decirle que me dé el registro de las 2010-09-30 09:01:09, a ver si alguna alma caritativa me puede ayudar, gracias.
  #2 (permalink)  
Antiguo 17/05/2012, 15:05
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con una consulta en mysql

Hola anlibu:

Antes que nada, veo que es tu primer mensaje, así es que Bienvenido al foro.

No estoy seguro de si entendí correctamente qué es lo que necesitas como resultado, sin embargo por los datos que pones creo que esto te puede servir:

Código MySQL:
Ver original
  1. mysql> select * from tabla;
  2. +------+------------+---------------------+--------+
  3. | id   | id_usuario | fecha               | estado |
  4. +------+------------+---------------------+--------+
  5. |    1 |          2 | 2010-08-30 09:00:39 |      0 |
  6. |    9 |          2 | 2010-08-30 14:03:31 |      1 |
  7. |   11 |          2 | 2010-08-30 16:30:29 |      0 |
  8. |   44 |          2 | 2010-08-30 19:30:49 |      1 |
  9. |   16 |          2 | 2010-09-30 09:01:09 |      0 |
  10. |   92 |          2 | 2010-09-30 14:02:51 |      1 |
  11. |   49 |          2 | 2010-09-30 16:37:19 |      0 |
  12. |   33 |          2 | 2010-09-30 19:24:29 |      1 |
  13. +------+------------+---------------------+--------+
  14. 8 rows in set (0.00 sec)
  15.  
  16. mysql> select * from tabla
  17.     -> where date(fecha) = (select date(max(fecha)) from tabla
  18.     -> where id_usuario = 2) and
  19.     -> id_usuario = 2
  20. +------+------------+---------------------+--------+
  21. | id   | id_usuario | fecha               | estado |
  22. +------+------------+---------------------+--------+
  23. |   16 |          2 | 2010-09-30 09:01:09 |      0 |
  24. |   92 |          2 | 2010-09-30 14:02:51 |      1 |
  25. |   49 |          2 | 2010-09-30 16:37:19 |      0 |
  26. |   33 |          2 | 2010-09-30 19:24:29 |      1 |
  27. +------+------------+---------------------+--------+
  28. 4 rows in set (0.00 sec)

dale un vistazo para ver si es lo que necesitas... y si no, pues trata de ser un poco más claro con tu explicación y con gusto tratamos de ayudarte.

Saludos
Leo.
  #3 (permalink)  
Antiguo 17/05/2012, 15:50
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Problema con una consulta en mysql

Hola leonardo_josue, no me he explicado bien, de todas formas gracias.

Lo que pretendo es obtener cada una de las filas con fecha mas alta por separado, teniendo en cuenta el estado(0->entra y 1-->sale) cada

1º| 2010-09-30 09:01:09
2º | 2010-09-30 14:02:51
3º| 2010-09-30 16:37:19
4º| 2010-09-30 19:24:29

La consulta que hago es:

SELECT max( fecha )
FROM registros
WHERE id_usuario =2
AND estado =0
AND fecha >= '09:00:00';

Pero se me va a la 3ª 2010-09-30 16:37:19 y necesito cada una por separado.
+------+------------+---------------------+--------+
id | id_usuario | fecha | estado |
+------+------------+---------------------+--------+
| 16 | 2 | 2010-09-30 09:01:09 | 0 |
| 92 | 2 | 2010-09-30 14:02:51 | 1 |
| 49 | 2 | 2010-09-30 16:37:19 | 0 |
| 33 | 2 | 2010-09-30 19:24:29 | 1 |
+------+------------+---------------------+--------+
De nuevo gracias.
  #4 (permalink)  
Antiguo 17/05/2012, 16:14
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Problema con una consulta en mysql

Hola leonardo_josue, no me he explicado bien, de todas formas gracias.

Lo que pretendo es obtener cada una de las filas con fecha mas alta por separado, teniendo en cuenta el estado(0->entra y 1-->sale)

1º| 2010-09-30 09:01:09
2º | 2010-09-30 14:02:51
3º| 2010-09-30 16:37:19
4º| 2010-09-30 19:24:29

La consulta que hago es:

SELECT max( fecha )
FROM registros
WHERE id_usuario =2
AND estado =0
AND fecha >= '09:00:00';

Pero se me va a la 3ª 2010-09-30 16:37:19 y necesito cada una por separado.
+------+------------+---------------------+--------+
id | id_usuario | fecha | estado |
+------+------------+---------------------+--------+
| 16 | 2 | 2010-09-30 09:01:09 | 0 |
| 92 | 2 | 2010-09-30 14:02:51 | 1 |
| 49 | 2 | 2010-09-30 16:37:19 | 0 |
| 33 | 2 | 2010-09-30 19:24:29 | 1 |
+------+------------+---------------------+--------+
De nuevo gracias.
  #5 (permalink)  
Antiguo 18/05/2012, 08:52
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con una consulta en mysql

Quedé en las mismas necesito una explicación con peras y manzanas

Comencemos otra vez desde el principio: ¿Qué registros son los que se tienen que mostrar como resultado? Es decir, tienes 8 registros de ejemplo... ¿cuántos y cuáles son los que necesitas obtener como salida?

De primera vista dices que necesitas la información del último día que trabajo correcto??? entonces descartamos los registros para la fecha 2010-08-30

Ahora, a partir de los 4 registros que existen para la fecha 2010-09-30 ¿cuáles son los que te interesan?

En cuanto a la consulta que tienes, al utilizar la función MAX en tu consulta, es obvio que te regrese 2010-09-30 16:37:19 ya que esta es mayor que
2010-09-30 09:01:09

Tratando de jugar al adivino (porque realmente estoy dando palos de ciego con tu explicación) veamos este script:


Código MySQL:
Ver original
  1. mysql> select * from tabla;
  2. +------+------------+---------------------+--------+
  3. | id   | id_usuario | fecha               | estado |
  4. +------+------------+---------------------+--------+
  5. |    1 |          2 | 2010-08-30 09:00:39 |      0 |
  6. |    9 |          2 | 2010-08-30 14:03:31 |      1 |
  7. |   11 |          2 | 2010-08-30 16:30:29 |      0 |
  8. |   44 |          2 | 2010-08-30 19:30:49 |      1 |
  9. |   16 |          2 | 2010-09-30 09:01:09 |      0 |
  10. |   92 |          2 | 2010-09-30 14:02:51 |      1 |
  11. |   49 |          2 | 2010-09-30 16:37:19 |      0 |
  12. |   33 |          2 | 2010-09-30 19:24:29 |      1 |
  13. +------+------------+---------------------+--------+
  14. 8 rows in set (0.02 sec)
  15.  
  16. mysql> select min(T1.fecha) from tabla T1 inner join
  17.     -> (
  18.     -> select date(max(fecha)) fecha from tabla
  19.     -> where id_usuario = 2) T2 on date(T1.fecha) = T2.fecha
  20.     -> where
  21.     -> time(T1.fecha) > '09:00:00' and estado = 0;
  22. +---------------------+
  23. | min(T1.fecha)       |
  24. +---------------------+
  25. | 2010-09-30 09:01:09 |
  26. +---------------------+
  27. 1 row in set (0.01 sec)

El inner join sirve para filtrar sólo los registros para la última fecha de trabajo. la parte del min es para obtener la PRIMER fecha de ENTRADA del día 2010-09-30 para el usuario 2 ocurrida después de las 09:00:00.

Repito, si continuas con problemas trata de explicarte un poquito mejor jejeje... básicamente copiaste y pegaste lo mismo que pusiste en tu primer post, trata de explicarlo de una manera diferente.

Saludos
Leo.
  #6 (permalink)  
Antiguo 21/05/2012, 15:25
 
Fecha de Ingreso: mayo-2012
Mensajes: 8
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Problema con una consulta en mysql

Hola leonardo_josue, eso es lo que pretendia, obtener la fila con la primera hora de entrada del ultimo dia.

Un saludo y muchisimas gracias.

Etiquetas: registros, select, tabla, campos
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 15:06.