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

SQL avanzado

Estas en el tema de SQL avanzado en el foro de Mysql en Foros del Web. Hola tengo una tabla de usuarios donde van se van registrando los gramos de alimento que ingieren en una comida, pudiendo ser la comida desayuno, ...
  #1 (permalink)  
Antiguo 15/12/2008, 12:15
 
Fecha de Ingreso: octubre-2008
Mensajes: 12
Antigüedad: 15 años, 6 meses
Puntos: 0
SQL avanzado

Hola tengo una tabla de usuarios donde van se van registrando los gramos de alimento que ingieren en una comida, pudiendo ser la comida desayuno, comida o cena. Y se refleja la fecha en que el usuario introdujo los datos.

tengo tabla con campos: IDUSER, COMIDA, FECHA_DATOS, GRAMOS

comida puede tomar valores: 0 desayuno, 1 comida, 2 cena

que consulta tengo que hacer para obtener para un usuario los gramos introducidos en los ultimos 8 dias, pero de forma que en cada dia no se repita el valor de comida.

Es decir si un usuario:
dia 1 --> introduce bien las 3 comidas
dia 2--> intruduce bien las 3 comidas
dia 3--> introduce bien 2 comidas ( no problema)
dia 4--> introduce 5 comidas ( ha repetido la cena y el desayuno)
... dia8
hoy

si hoy hago la consulta quiero obtener de una sola consulta los gramos introducidos en cada comida, pero en el caso del dia 4 solo quiero que coja una cena y un desayuno. es decir que para un mismo dia en mi consulta no este repetido el valor de comida. Y no sé como hacerlo.

Para obtener todos los valores de los ultimos 8 dias solo realizar una consulta. Porque haciendo 3 consultas sabría obtenerlo.
Gracias!!!
  #2 (permalink)  
Antiguo 17/12/2008, 03:08
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años
Puntos: 2
Respuesta: SQL avanzado

Prueba esto:

Código:
SELECT DISTINCT CONCAT(FECHA_DATOS, COMIDA) AS ComidaFecha,  IDUSER, COMIDA, FECHA_DATOS, GRAMOS
FROM tabla1
WHERE FECHA_DATOS>DATE_SUB(FECHA_DATOS, INTERVAL 8 DAY)
ORDER BY FECHA_DATOS
No lo he podido probar pero creo que puede funcionar. No estoy seguro, pero tal vez se pueda hacer un DISTINCT de varios campos a la vez con lo que te ahorrarías la concatenación (CONCAT) y quedaría un poco mejor. En cualquier caso pruébalo y me cuentas cómo te fue.

Saludos
  #3 (permalink)  
Antiguo 17/12/2008, 04:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: SQL avanzado

Tienes un problema si esa tabla no tiene un identificador propio, un idtabla numérico y distinto para cada ingestión.
Si lo tienes, puedes hacerlo así:
Código sql:
Ver original
  1. SELECT tabla.iduser, SUM( tabla.gramos )
  2. FROM tabla
  3. INNER JOIN (
  4.  
  5. SELECT idtabla, iduser, comida
  6. FROM tabla
  7. WHERE iduser =1
  8. AND fecha_datos >DATE_ADD(CURDATE(), INTERVAL - 8 DAY)
  9.  
  10. GROUP BY comida, fecha_datos
  11. )t1 ON t1.idtabla = tabla.idtabla
  12. GROUP BY tabla.iduser


esto te sacará los gramos de la primera ingestión que se repita; es decir que si hace dos comidas, sumará los datos de la primera, e igual con desayuno y cena. Podrías sacar también los datos teniendo en cuenta la mayor cantidad o menor cantidad de gramos por ingestión.

Ahora bien, si no tienes ese id propio de cada ingestión, te resultará difícil, pues tanto la fecha como el iduser, como la comida o los gramos pueden repetirse.

Última edición por jurena; 17/12/2008 a las 06:29
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:04.