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

consulta excluyente con fechas

Estas en el tema de consulta excluyente con fechas en el foro de Mysql en Foros del Web. Hola amig@s, tras probar un buen rato, no tengo más remedio que solicitar vuestra ayuda tengo dos tablas ( employee y categoria_gastos ) y me ...
  #1 (permalink)  
Antiguo 14/09/2009, 01:55
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
consulta excluyente con fechas

Hola amig@s,

tras probar un buen rato, no tengo más remedio que solicitar vuestra ayuda

tengo dos tablas (employee y categoria_gastos) y me gustaria hacer una consulta de manera que se obtenga la suma total de "Gastos" de la tabla employee y que en la busqueda no se incluya la categoria Obras que es un registro de la taba categoria_gastos. Además la busqueda tiene que ser solo para el mes de Junio del 2009.

Os doy la query que he conseguido hasta ahora aunque creo que lo unico que le falta es lo de que no incluya las Obras:
Código PHP:
SELECT sum(GastosFROM employee WHERE Fecha BETWEEN '2009-06-01' AND '2009-06-31' 
Además os adjunto las dos tablas
Código:
CREATE TABLE IF NOT EXISTS `categoria_gastos` (
  `id_categoria_gastos` smallint(100) NOT NULL default '0',
  `categoria_gastos` varchar(100) default NULL,
  PRIMARY KEY  (`id_categoria_gastos`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Volcar la base de datos para la tabla `categoria_gastos`
--

INSERT INTO `categoria_gastos` (`id_categoria_gastos`, `categoria_gastos`) VALUES
(190, 'Mantenimiento'),
(191, 'Mobiliario'),
(192, 'Moviles'),
(193, 'Obras'),
(194, 'Oficina'),
(196, 'Pabellon'),
(102, 'Agua'),
(197, 'Paginas web');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `employee`
--

CREATE TABLE IF NOT EXISTS `employee` (
  `emp_id` int(11) NOT NULL auto_increment,
  `id_categoria_gastos` smallint(6) default NULL,
  `Fecha` date NOT NULL default '0000-00-00',
  `Gastos` float NOT NULL default '0',
  PRIMARY KEY  (`emp_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=723 ;

--
-- Volcar la base de datos para la tabla `employee`
--

INSERT INTO `employee` (`emp_id`, `id_categoria_gastos`, `Fecha`, `Gastos`) VALUES
(209, 190, '2009-06-13', 73.66),
(207, 191, '2009-06-12', 1.68),
(208, 193, '2009-06-13', 2000),
(272, 192, '2009-06-09', 70.5),
(275, 190, '2009-07-01', 35),
(277, 194, '2009-07-06', 100),
(280, 196, '2009-07-01', 30),
(281, 190, '2009-07-01', 20),
(296, 192, '2009-07-11', 15),
(297, 196, '2009-07-04', 25);
El resultado debería ser un importe que incluya la suma total de todos los gastos que ha habido en Junio 2009, excepto los gastos de Obras, el resultado correcto seria 145,39 Euros
Mil gracias!

Última edición por manupalaya; 14/09/2009 a las 02:43
  #2 (permalink)  
Antiguo 14/09/2009, 05:19
 
Fecha de Ingreso: septiembre-2003
Mensajes: 65
Antigüedad: 20 años, 7 meses
Puntos: 1
Respuesta: consulta excluyente con fechas

Creo que con esto te valdria


SELECT SUM(Gastos-IF(cg.id_categoria_gastos=193,Gastos,0) ) AS totalgastos FROM employee e LEFT JOIN categoria_gastos cg ON e.id_categoria_gastos=cg.id_categoria_gastos WHERE Fecha BETWEEN '2009-06-01' AND '2009-06-31'
  #3 (permalink)  
Antiguo 14/09/2009, 06:50
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: consulta excluyente con fechas

Que bien funciona,
pero perdona me equivoque y no era que solo excluyera un registro sino varios,
¿como se podria hacer? es decir por ejemplo que no incluya ni Obras, ni Moviles


Lo siento, me despisté.
Y muchas gracias
  #4 (permalink)  
Antiguo 15/09/2009, 14:34
 
Fecha de Ingreso: enero-2007
Mensajes: 156
Antigüedad: 17 años, 3 meses
Puntos: 3
Respuesta: consulta excluyente con fechas

Conseguido!

Simplemente había que poner esto:

-IF(cg.id_categoria_gastos=193,Gastos,0)


tantas veces como archivos quieras excluir, cambiando logicamente el numero de id.
La cosa quedaría de la siguiente manera, en este ejemplo:
imaginemos que queremos excluir de la categoria Gastos "Obras", "Moviles" y "Oficina" los cuales tienen el ID 192, 193 y 194

Código codigo query:
Ver original
  1. SELECT SUM(Gastos-IF(cg.id_categoria_gastos=193,Gastos,0)-IF(cg.id_categoria_gastos=192,Gastos,0)-IF(cg.id_categoria_gastos=194,Gastos,0) ) AS totalgastos FROM employee e LEFT JOIN categoria_gastos cg ON e.id_categoria_gastos=cg.id_categoria_gastos WHERE Fecha BETWEEN '2009-06-01' AND '2009-06-31'


Las gracias para gurthgor!
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 09:34.