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

[SOLUCIONADO] Sumar ventas por cada intervalo de tiempo

Estas en el tema de Sumar ventas por cada intervalo de tiempo en el foro de Mysql en Foros del Web. Hola Gente.. Necesito conocer las ventas que hicieron dos usuarios entre las 11 y las 19 de un determinado día, y dividirlas cada 30 minutos. ...
  #1 (permalink)  
Antiguo 22/03/2016, 15:18
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 9 meses
Puntos: 0
Sumar ventas por cada intervalo de tiempo

Hola Gente.. Necesito conocer las ventas que hicieron dos usuarios entre las 11 y las 19 de un determinado día, y dividirlas cada 30 minutos.

Ej: Usuario 011, día 21/03/2016 de 11:00 a 11:30 = 30 ventas.
día 21/03/2016 de 11:30 a 12:00 = 50 ventas.

El problema es que en el campo hora, me figura así 3181-201603221800. Las cuatro primeras cifras no se que son y varían, y despues del guion esta la fecha y la hora.


Hasta el momento tengo esto que me suma todas las ventas que hicieron los usuarios:

Código SQL:
Ver original
  1. SELECT TERMINAL_ID , COUNT(*) AS VENTAS
  2. FROM TRANSACCIONES
  3. WHERE TERMINAL_ID = '011' OR TERMINAL_ID = '004'
  4. GROUP BY TERMINAL_ID


TERMINAL_ID ------ VENTAS
011 ------------------ 15000
004 ------------------ 23000

No se como seleccionar las ventas de dos usuarios en un determinado día y entre intervalos.
Habra alguna manera o necesito el campo hora sin esos números?

Muchas gracias
  #2 (permalink)  
Antiguo 22/03/2016, 15:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Sumar ventas por cada intervalo de tiempo

hola agustinpak:

empecemos por lo básico: ¿de qué tipo es tu campo hora?... por lo que pones en tu post puedo suponer que se trata de un tipo VARCHAR, lo que es una terrible práctica. Si vas a almacenar FECHAS y/u HORAS entonces utilizas los tipos de datos DATE, TIME o DATETIME según corresponta, pero por ningún motivo los almacenas como TEXTO.

Tienes varias formas de resolver lo que quieres, depende por ejemplo si los resultados los quieres en forma de columnas o de registros, puedes comparar cada uno de los rangos que quieres analizar o puede tratar de "redondear" la hora hacia la "media hora" más cercana. Una vez que hagas esto, simplemente agrupas.

haz la prueba y nos comentas, si tienes problemas, postea lo que hayas intentado y con gusto te ayudamos a completar la consulta.

Saludos
Leo.
  #3 (permalink)  
Antiguo 22/03/2016, 17:00
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Sumar ventas por cada intervalo de tiempo

Hola Leo! Efectivamente es de tipo VARCHAR. El único campo tipo DATE que tiene la tabla es la fecha. El problema es que yo no hice la tabla, ni tengo permisos para modificarla. Solo lectura.

Entonces ahora me piden esto, y al no tener la hora no puedo hacer el intervalo.
Pense que podría tomar los últimos cuatro dígitos del campo 3181-201603221800, pero no se si se puede.

En cada venta se genera ese campo, pero los cuatro números principales varían, cambian en cada nuevo registro, no se con que intención lo hicieron así y a que se debe.

3611-201603230700
5071-201603221940
3814-201603212000
etc...

Cuando te refieres a que tengo varias formas de hacerlo, es teniendo el campo hora correctamente o se puede hacer así como esta la tabla?

Gracias de nuevo!
  #4 (permalink)  
Antiguo 23/03/2016, 08:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Sumar ventas por cada intervalo de tiempo

Hola de nuevo agustinpak:

Puedes utilizar el campo varchar para extraer la hora, sin embargo, puede haber casos en que la cadena no tenga el formato especificado y tengas errores de conversión que debes manejar por separado. Para este ejemplo voy a suponer que los últimos 4 caracteres corresponden a la hora y minuto. Lo primero que tienes que hacer es extraer estos caracteres, esto lo haces con SUBSTR:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla;
  2. +----------+-------------------+
  3. | id_tabla | hora              |
  4. +----------+-------------------+
  5. |        1 | 3611-201603230700 |
  6. |        2 | 5071-201603221940 |
  7. |        3 | 814-201603212000  |
  8. +----------+-------------------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT
  12.     ->    id_tabla,
  13.     ->    hora,
  14.     ->    SUBSTR(hora, LENGTH(hora) - 3, 4) hora_varchar
  15.     -> FROM tabla;
  16. +----------+-------------------+--------------+
  17. | id_tabla | hora              | hora_varchar |
  18. +----------+-------------------+--------------+
  19. |        1 | 3611-201603230700 | 0700         |
  20. |        2 | 5071-201603221940 | 1940         |
  21. |        3 | 814-201603212000  | 2000         |
  22. +----------+-------------------+--------------+
  23. 3 rows in set (0.00 sec)

Ahora si, puedes convertir estos cuatro caracteres a tipo TIME o DATETIME:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->    id_tabla,
  3.     ->    hora,
  4.     ->    SUBSTR(hora, LENGTH(hora) - 3, 4) hora_varchar,
  5.     ->    STR_TO_DATE(SUBSTR(hora, LENGTH(hora) - 3, 4), '%H%i') hora_time
  6.     -> FROM tabla;
  7. +----------+-------------------+--------------+-----------+
  8. | id_tabla | hora              | hora_varchar | hora_time |
  9. +----------+-------------------+--------------+-----------+
  10. |        1 | 3611-201603230700 | 0700         | 07:00:00  |
  11. |        2 | 5071-201603221940 | 1940         | 19:40:00  |
  12. |        3 | 814-201603212000  | 2000         | 20:00:00  |
  13. +----------+-------------------+--------------+-----------+
  14. 3 rows in set (0.00 sec)

Entonces si, con el dato ya como TIME o DATETIME puedes hacer las agrupaciones y comparaciones que quieras.

Saludos
Leo.
  #5 (permalink)  
Antiguo 04/07/2016, 20:52
 
Fecha de Ingreso: febrero-2012
Ubicación: Cancun
Mensajes: 79
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Sumar ventas por cada intervalo de tiempo

Muchísimas gracias Leo!

Me sirvio mucho tu ayuda.

Saludos!!

Etiquetas: cada, campo, fecha, intervalo, select, tiempo, ventas
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 22:54.