示例数据是这样的:
--
-- Table structure for table `dogs`
--
CREATE TABLE IF NOT EXISTS `dogs` (
`version_stamp` datetime NOT NULL,
`dog_id` int(11) unsigned NOT NULL,
`dog_name` varchar(30) DEFAULT NULL,
`dog_color` varchar(30) DEFAULT NULL,
PRIMARY KEY (`version_stamp`,`dog_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `dogs`
--
INSERT INTO `dogs` (`version_stamp`, `dog_id`, `dog_name`, `dog_color`) VALUES
('2014-09-28 09:30:24', 19849, 'Ruediger', 'black'),
('2014-09-25 02:15:23', 19850, NULL, 'white'),
('2014-09-25 02:16:41', 19850, 'Bello', NULL),
('2014-09-26 02:15:23', 19850, NULL, 'brown'),
('2014-09-27 02:16:41', 19850, 'Dieter', NULL);
我想要的是一行的最新版本,例如dog
行。
假设我输入dog_id
19850
日期时间戳
2014-09-26 02:15:24
然后我想得到:Bello brown
当我使用不同的时间戳时,说:
2099-12-12 12:12:12
我想得到
迪特尔,棕色
有没有办法在 SQL 中执行此操作?
如果您指定 dog_id 和 version_stamp,这样的事情应该有效。它将根据最新的 version_stamp 来选择最上面的 dog_name 和 dog_color ORDER。然后使用 MAX() 基于 dog_id 将它们汇总。
小提琴的例子。
您可以使用 2 个简单的子查询,每列一个: