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

Consulta en MYSQL sacar secuencia

Estas en el tema de Consulta en MYSQL sacar secuencia en el foro de Mysql en Foros del Web. Mi pregunta es simple como puedo hacer para que me regrese esto una consulta en mysql |Secuencia| -------------- | 1 | | 2 | | ...
  #1 (permalink)  
Antiguo 28/12/2011, 23:22
 
Fecha de Ingreso: abril-2010
Mensajes: 66
Antigüedad: 14 años, 7 meses
Puntos: 4
Consulta en MYSQL sacar secuencia

Mi pregunta es simple como puedo hacer para que me regrese esto una consulta en mysql

|Secuencia|
--------------
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |

y tambien poder hacerlo con fechas. . . Lo unico que he logrado hacer es algo asi como
SELECT 1, 2 , 3, 4, 5;
Pero esto me devuelve de manera horizontal y yo quiero vertical, ademas de que quiero que le diga cuenta del 1 al 20 o del 3 al 50 etc etc

Bueno supongo que si se puede hacer eso se podra hacer lo mismo con las fechas jeje

Espero puedan ayudarme

Saludos
  #2 (permalink)  
Antiguo 28/12/2011, 23:27
 
Fecha de Ingreso: abril-2010
Mensajes: 66
Antigüedad: 14 años, 7 meses
Puntos: 4
Respuesta: Consulta en MYSQL sacar secuencia

Se me ocurrio una manera de hacerlo y es la siguiente

SELECT 1 UNION Select 2 UNION Select 3 UNION SELECT 4 UNION SELECT 5;

pero ahora el problema es como lo hago dinamico que yo le diga secuencia del 10 al 20 o del 40 al 100 Etc. . . .
  #3 (permalink)  
Antiguo 29/12/2011, 04:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Consulta en MYSQL sacar secuencia

Para que quieres hacer eso con una query cualquier lenguaje de programacion que estes usando es capaz de generar una lista de numeros en vertical como dices sin tener que "molestar" al servidor de BBDD...

Código MySQL:
Ver original
  1.        (@a:=@a+1) contador,
  2.        ...lista de campos...
  3.     FROM tuTabla JOIN (SELECT @a:= 0) T

Esto genera un contador junto a los registro de tuTabla

Código MySQL:
Ver original
  1.        (@a:=@a+1) Secuencia
  2.     FROM (SELECT @a:= 0) T
  3. LIMIT 0,19

No se si eso funcionará pero seria la idea un contador limitado a 20...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #4 (permalink)  
Antiguo 29/12/2011, 11:19
 
Fecha de Ingreso: abril-2010
Mensajes: 66
Antigüedad: 14 años, 7 meses
Puntos: 4
Respuesta: Consulta en MYSQL sacar secuencia

=0 Si funciona pero junto con otra tabla . .bueno mejor te digo que es lo que quiero hacer a lo mejor es mas facil asi
Tengo una tabla de Entrada de empleados Fecha, Hora de entrada y de salida

Código MySQL:
Ver original
  1. +------------+--------------+------------------------------+--------------+
  2. | idEntrada|   Fecha       |HoraEntrada|HoraSalida|idEmpleado|
  3. +------------+--------------+------------------------------+--------------+
  4. |        1      |01/01/2011 |    13:00       |  21:00     |        1         |
  5. |        2      |02/01/2011 |    13:04       |  21:00     |        1         |
  6. |        3      |03/01/2011 |    13:03       |  21:00     |        1         |
  7. |        4      |04/01/2011 |    13:06       |  21:00     |        1         |
  8. |        5      |05/01/2011 |    13:07       |  21:00     |        1         |
  9. |        6      |06/01/2011 |    13:06       |  21:00     |        1         |
  10. |        7      |08/01/2011 |    13:09       |  21:00     |        1         |
  11. |        8      |09/01/2011 |    13:12       |  21:00     |        1         |
  12. |        9      |10/01/2011 |    13:15       |  21:00     |        1         |
  13. |        10    |11/01/2011 |    13:16       |  21:00     |        1         |
Suponiendo que el empleado Con idEmpleado = 1 Trabaja todos los dias!!!
Mi pregunta es la siguiente Como saber que dias el Empleado no Checo??? Osea Falto. .
a simple vista se puede ver que el 07/01/2011 No se encuentra en la tabla por tanto ese dia falto pero como genero una consulta que me diga las fechas que faltan en esa secuencia de dia a dia. . .
Espero me puedan ayudar

Saludos
  #5 (permalink)  
Antiguo 30/12/2011, 03:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Consulta en MYSQL sacar secuencia

Lo que necesitas es un calendario, por lo que veo siempre se usa programacion externa ... php o lo que sea. Googlea "calendar mysql".
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 30/12/2011, 03:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Consulta en MYSQL sacar secuencia

Aqui tienes una solución.

Código MySQL:
Ver original
  1. DROP TABLE IF EXISTS ints,calendar;
  2.  
  3. CREATE TABLE INTS(i int);
  4.  
  5. INSERT INTO ints
  6.       VALUES(0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
  7.  
  8. CREATE TABLE calendar(fecha date);
  9.  
  10. SET @n=0;
  11.  
  12. INSERT INTO calendar
  13.         SELECT ADDDATE('2008-1-1',@n:=@n+1)
  14.             FROM ints a JOIN ints b;

Se trata de crear una tabla llamada calendar el ejemplo que ponen genera los 100 primeros dias de 2008... pero modificando la cantidad de numeros entrados en INTS y la fecha inicial no sera dificil de modificar (fijate que se apoyan en un producto cartesiano entres INTS y INTS).

Una vez tienes la tabla calendar del periodo que necesites (o una seleccion de esta entre fechas...)

Código MySQL:
Ver original
  1. SELECT c.fecha
  2. FROM calendar c
  3. WHERE c.fecha NOT IN (SELECT e.Fecha
  4.                       FROM  TuTablaEntradas e
  5.                       WHERE e.idEmpleado=X
  6.                       AND e.Fecha>='inicio periodo'
  7.                       AND e.Fecha<='fin periodo')

te dará las fechas que el empleado 1 no trabajo....

Te has planteado que pasa si un empleado entra y sale mas de una vez en un mismo dia o entra pero no sale o sale pero no entra...

(Por cierto a la tabla tambien le puedes llamar calendario... no por nombrarla en ingles va a funcionar mejor)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 30/12/2011 a las 04:17
  #7 (permalink)  
Antiguo 30/12/2011, 06:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Consulta en MYSQL sacar secuencia

Quizas esta es mejor.... analizala....

(de la misma fuente que la anterior)

cambiando maquinas por empleados es que el ejemplo es lo que estas buscando!!!!

Código pre:
Ver original
  1. Gaps in a time series
  2.  
  3. Advanced time series analysis generally requires custom software, but
  4. straightforward SQL queries can answer simple time series questions.
  5. You have a jobtimes table with columns ID, job, machine, start_time, and
  6. stop_time. You wish to know which machines have had gaps between activity
  7. periods. It's a version of "Find available booking periods":
  8.  
  9. drop table jobtimes;
  10. create table jobtimes(id int, machine smallint, start_time timestamp, stop_time timestamp);
  11. insert into jobtimes values(1,1,'2011-7-1 08:00:00', '2011-7-1 10:00:00');
  12. insert into jobtimes values(2,1,'2011-7-1 11:00:00', '2011-7-1 14:00:00');
  13. insert into jobtimes values(3,2,'2011-7-1 08:00:00', '2011-7-1 09:00:00');
  14. insert into jobtimes values(4,2,'2011-7-1 09:00:00', '2011-7-1 10:00:00');
  15. insert into jobtimes values(5,3,'2011-7-1 08:00:00', '2011-7-1 08:30:00');
  16. insert into jobtimes values(6,3,'2011-7-1 10:00:00', '2011-7-1 12:00:00');
  17. select * from jobtimes;
  18. +------+---------+---------------------+---------------------+
  19. | id   | machine | start_time          | stop_time           |
  20. +------+---------+---------------------+---------------------+
  21. |    1 |       1 | 2011-07-01 08:00:00 | 2011-07-01 10:00:00 |
  22. |    2 |       1 | 2011-07-01 11:00:00 | 2011-07-01 14:00:00 |
  23. |    3 |       2 | 2011-07-01 08:00:00 | 2011-07-01 09:00:00 |
  24. |    4 |       2 | 2011-07-01 09:00:00 | 2011-07-01 10:00:00 |
  25. |    5 |       3 | 2011-07-01 08:00:00 | 2011-07-01 08:30:00 |
  26. |    6 |       3 | 2011-07-01 10:00:00 | 2011-07-01 12:00:00 |
  27. +------+---------+---------------------+---------------------+
  28.  
  29. SELECT
  30.   a.machine,
  31.   a.stop_time AS 'Unused From',
  32.   Min(b.start_time) AS 'To'
  33. FROM jobtimes AS a
  34. JOIN jobtimes AS b ON a.machine=b.machine AND a.stop_time < b.start_time
  35. GROUP BY a.stop_time
  36. HAVING a.stop_time < MIN(b.start_time)
  37. ORDER BY machine;
  38. +---------+---------------------+---------------------+
  39. | machine | Unused From         | To                  |
  40. +---------+---------------------+---------------------+
  41. |       1 | 2011-07-01 10:00:00 | 2011-07-01 11:00:00 |
  42. |       3 | 2011-07-01 08:30:00 | 2011-07-01 10:00:00 |
  43. +---------+---------------------+---------------------+
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: secuencia, select, sql
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 11:21.