Obtener la fecha mas reciente
Hola, quisiera que alguno me pudiera echar una manito con la siguiente consulta en MySql:
tengo una tabla con informacion de neumaticos, digamos asi:
neumaticos
=========
id_neumatico
medida
marca
en otra tabla aparecen los neumaticos que corresponden a un vehiculo y su posicion
neumaticos_vehiculo
==============
id_vehiculo (de otra tabla con los vehiculos)
id_neumatico
posicion
y otra con su historial (cuando han entrado, o sea se colocaron) en el vehiculo, o cuando se retiro de el mismo, que kms tenia ese vehiculo en particular en ese momento, en que posicion, y que profundidades tenia el neumatico
historial
=======
id_neumatico
vehiculo
posicion
kms_vehiculo
fecha
evento
profundidad_exterior
profundidad_media
profundidad_interior
los eventos pueden ser:
entrante
saliente
rotacion
chequeo
el sentido de estas tablas es mantener un registro del neumatico, su "vida" a lo largo de varios cambios. El problema es que necesito saber cuales son las ultimas profundidades registradas. Por logica deberia ser la de la ultima fecha del ultimo evento de "entrante". Con la sgte consulta logro obtener todos los neumaticos de un vehiculo en particular pero no puedo obtener la ultima profundidad
SELECT
inv.codigo,
nv.posicion,
ht.prof_ext,
ht.prof_med,
ht.prof_int,
ht.fecha
FROM neumaticos_vehiculos nv
LEFT JOIN neumaticos_inventario inv
ON inv.id_interno = nv.id_neumatico
LEFT JOIN neumaticos_historial ht
ON ht.id_neumatico = nv.id_neumatico AND ht.movimiento = 'cambio_entrante'
WHERE nv.id_vehiculo = 95
ORDER BY nv.posicion, ht.fecha DESC
En la imagen adjunta muestro en rojo los registros que me deberia devolver solamente
llevo días detenido en esto y cualquier luz será agradecida ;)
Hola Tokkaido, yo necesité algo similar a lo que pides, sólo que con la fecha más antigua.
Aqui te paso el link con la respuesta que me dieron en un foro, que por cierto lo recomiendo ampliamente.
http://www.dbasupport.com.mx/index.php?option=com_kunena&Itemid=0&func=view&catid=25&id=1896
Saludos
al final hice lo siguiente, puede que no sea lo "optimo" pero funciona, de hecho me hace la consulta mucho mas pequeña y menos complicada:
como cada vez que agrego un neumático se actualizan 2 tablas, el historial del neumático y la tabla neumaticos_vehiculos que lleva el registro de que neumáticos están en que vehículos y en que posición, fue a esta tabla que le agregue un campo ultima_fecha que registra la fecha del ultimo evento "cambio_entrante" asi solo hago un left join con las fechas. un truquillo pero util ;)
Muy interesante lo que planteas. El problema aqui por lo que puedo ver es no puedes usar la funcion MAX de MySQL ya que solamente te retorna una sola fecha, que en tu caso es la mas reciente. Ahora bien, quiza una manera de solucionarlo seria realizando dos consultas: 1) Obtener la fecha maxima, 2) Usar ese valor como parametro para realizar la consulta que aqui planteas.
Esa seria mi humilde solucion. Quiza ya lo hayas considerado.
a quien se quiera tomar la molestia he aqui un poco de data para hacer el ejercicio
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for vehiculos
-- ----------------------------
DROP TABLE IF EXISTS `vehiculos`;
CREATE TABLE `vehiculos` (
`id_interno` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`numero` VARCHAR(3) COLLATE utf8_spanish_ci NOT NULL,
`patente` VARCHAR(7) COLLATE utf8_spanish_ci NOT NULL,
PRIMARY KEY (`id_interno`),
UNIQUE KEY `id_interno_idx` (`id_interno`) USING BTREE,
UNIQUE KEY `numero_idx` (`numero`) USING BTREE,
UNIQUE KEY `patente_idx` (`patente`) USING BTREE
) ENGINE=INNODB AUTO_INCREMENT=177 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `vehiculos` VALUES ('1', '27', 'EB95064');
INSERT INTO `vehiculos` VALUES ('2', '58', 'SU2124K');
INSERT INTO `vehiculos` VALUES ('4', '60', 'TB39596');
INSERT INTO `vehiculos` VALUES ('10', '61', 'TA45354');
INSERT INTO `vehiculos` VALUES ('11', '62', 'TJ97006');
INSERT INTO `vehiculos` VALUES ('12', '66', 'TV9895K');
INSERT INTO `vehiculos` VALUES ('95', '59', 'TB39588');
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for neumaticos_inventario
-- ----------------------------
DROP TABLE IF EXISTS `neumaticos_inventario`;
CREATE TABLE `neumaticos_inventario` (
`id_interno` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`codigo` SMALLINT(11) UNSIGNED DEFAULT NULL,
`prof_ext_inicial` DECIMAL(3,1) UNSIGNED NOT NULL,
`prof_med_inicial` DECIMAL(3,1) UNSIGNED NOT NULL,
`prof_int_inicial` DECIMAL(3,1) UNSIGNED NOT NULL,
`kms_inicial` INT(11) UNSIGNED NOT NULL,
PRIMARY KEY (`id_interno`),
UNIQUE KEY `id_interno_idx` (`id_interno`) USING BTREE,
UNIQUE KEY `codigo_idx` (`codigo`) USING BTREE
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `neumaticos_inventario` VALUES ('1', '3251', '15.0', '15.0', '15.0', '99120');
INSERT INTO `neumaticos_inventario` VALUES ('2', '3250', '15.0', '15.0', '15.0', '99120');
INSERT INTO `neumaticos_inventario` VALUES ('3', '3236', '15.0', '15.0', '15.0', '105438');
INSERT INTO `neumaticos_inventario` VALUES ('4', '3287', '15.0', '15.0', '15.0', '105438');
INSERT INTO `neumaticos_inventario` VALUES ('5', '3333', '15.0', '15.0', '15.0', '101000');
INSERT INTO `neumaticos_inventario` VALUES ('6', '3332', '15.0', '15.0', '15.0', '105438');
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for neumaticos_vehiculos
-- ----------------------------
DROP TABLE IF EXISTS `neumaticos_vehiculos`;
CREATE TABLE `neumaticos_vehiculos` (
`id_interno` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_neumatico` INT(11) UNSIGNED NOT NULL,
`id_vehiculo` INT(11) UNSIGNED NOT NULL,
`posicion` TINYINT(6) UNSIGNED NOT NULL,
PRIMARY KEY (`id_interno`),
UNIQUE KEY `id_interno` (`id_interno`) USING BTREE,
UNIQUE KEY `id_neumatico` (`id_neumatico`),
UNIQUE KEY `id_pos_veh` (`posicion`,`id_vehiculo`),
KEY `id_vehiculo_idx` (`id_vehiculo`),
CONSTRAINT `neumaticos_vehiculos_ibfk_1` FOREIGN KEY (`id_neumatico`) REFERENCES `neumaticos_inventario` (`id_interno`) ON UPDATE CASCADE,
CONSTRAINT `id_neumatico_vehiculo_fk` FOREIGN KEY (`id_vehiculo`) REFERENCES `vehiculos` (`id_interno`) ON UPDATE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `neumaticos_vehiculos` VALUES ('1', '1', '95', '1');
INSERT INTO `neumaticos_vehiculos` VALUES ('2', '2', '95', '2');
INSERT INTO `neumaticos_vehiculos` VALUES ('3', '3', '95', '3');
INSERT INTO `neumaticos_vehiculos` VALUES ('4', '4', '95', '4');
INSERT INTO `neumaticos_vehiculos` VALUES ('5', '5', '95', '5');
INSERT INTO `neumaticos_vehiculos` VALUES ('6', '6', '95', '6');
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for neumaticos_historial
-- ----------------------------
DROP TABLE IF EXISTS `neumaticos_historial`;
CREATE TABLE `neumaticos_historial` (
`id_interno` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`id_vehiculo` INT(11) UNSIGNED NOT NULL,
`kms_vehiculo` INT(11) NOT NULL,
`fecha` DATE NOT NULL,
`posicion` SMALLINT(6) NOT NULL,
`id_neumatico` INT(11) UNSIGNED NOT NULL,
`prof_ext` DECIMAL(3,1) NOT NULL,
`prof_med` DECIMAL(3,1) NOT NULL,
`prof_int` DECIMAL(3,1) NOT NULL,
`movimiento` VARCHAR(30) COLLATE utf8_spanish_ci NOT NULL,
PRIMARY KEY (`id_interno`),
UNIQUE KEY `id_interno_idx` (`id_interno`),
KEY `id_vehiculo_idx` (`id_vehiculo`),
KEY `id_neumatico_idx` (`id_neumatico`),
CONSTRAINT `neumaticos_historial_ibfk_1` FOREIGN KEY (`id_neumatico`) REFERENCES `neumaticos_inventario` (`id_interno`) ON UPDATE CASCADE,
CONSTRAINT `neumaticos_historial_ibfk_2` FOREIGN KEY (`id_vehiculo`) REFERENCES `vehiculos` (`id_interno`) ON UPDATE CASCADE
) ENGINE=INNODB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
-- ----------------------------
-- Records
-- ----------------------------
INSERT INTO `neumaticos_historial` VALUES ('1', '13', '10000', '2011-01-01', '1', '1', '15.0', '15.0', '15.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('2', '13', '20000', '2011-02-01', '1', '1', '14.0', '14.0', '14.0', 'cambio_saliente');
INSERT INTO `neumaticos_historial` VALUES ('3', '10', '40000', '2011-03-01', '3', '1', '14.0', '14.0', '14.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('4', '10', '70000', '2011-04-01', '3', '1', '10.0', '10.0', '10.0', 'cambio_saliente');
INSERT INTO `neumaticos_historial` VALUES ('5', '95', '50000', '2011-05-01', '1', '1', '10.0', '10.0', '10.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('6', '13', '12000', '2011-01-10', '2', '2', '15.0', '15.0', '15.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('7', '13', '20000', '2011-02-01', '2', '2', '14.0', '14.0', '14.0', 'cambio_saliente');
INSERT INTO `neumaticos_historial` VALUES ('8', '12', '40000', '2011-03-11', '4', '2', '14.0', '14.0', '13.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('9', '12', '50000', '2011-04-11', '4', '2', '11.0', '11.0', '12.0', 'cambio_saliente');
INSERT INTO `neumaticos_historial` VALUES ('10', '95', '50000', '2011-05-01', '2', '2', '11.0', '11.0', '12.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('11', '13', '10000', '2011-01-01', '3', '3', '15.0', '15.0', '15.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('12', '13', '20000', '2011-02-01', '3', '3', '14.0', '14.0', '14.0', 'cambio_saliente');
INSERT INTO `neumaticos_historial` VALUES ('13', '95', '50000', '2011-05-01', '3', '3', '14.0', '14.0', '14.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('14', '13', '10000', '2011-01-01', '4', '4', '15.0', '15.0', '15.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('15', '13', '20000', '2011-02-01', '4', '4', '13.0', '13.0', '13.0', 'cambio_saliente');
INSERT INTO `neumaticos_historial` VALUES ('16', '95', '50000', '2011-05-01', '4', '4', '13.0', '13.0', '13.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('17', '95', '50000', '2011-05-01', '4', '4', '15.0', '15.0', '15.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('18', '95', '50000', '2011-05-01', '5', '5', '15.0', '15.0', '15.0', 'cambio_entrante');
INSERT INTO `neumaticos_historial` VALUES ('19', '95', '50000', '2011-05-01', '6', '6', '15.0', '15.0', '15.0', 'cambio_entrante');
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.