我有一组存储在 MySQL 数据库中的清单记录。架构如下:
CREATE TABLE `manifests` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`carrier_id` INT(10) UNSIGNED NOT NULL COMMENT 'The carrier for which this manifest is being made',
`opened` DATETIME NOT NULL COMMENT 'Time the manifest was created',
`closed` DATETIME NULL DEFAULT NULL COMMENT 'Time the manifest was picked up and closed',
PRIMARY KEY (`id`),
INDEX `manifests_to_carriers_id` (`carrier_id`),
CONSTRAINT `manifests_to_carriers_id` FOREIGN KEY (`carrier_id`) REFERENCES `carriers` (`id`)
)
COMMENT='List of manifests that have been created by the system'
COLLATE='utf8_general_ci'
ENGINE=InnoDB;
白天可能有几个清单关闭和发送。我可以很容易地获得某一天的所有清单,按照它们发送的顺序。例如,我可以像这样获取今天发送的所有清单。
select *
from manifests
where date(closed) = date(now())
order by closed
这将产生如下数据:
"id" "carrier_id" "opened" "closed"
"4" "1" "2012-07-24 11:10:06" "2012-07-24 11:10:32"
"5" "1" "2012-07-24 11:10:40" "2012-07-24 11:11:08"
"6" "1" "2012-07-24 11:11:17" "2012-07-24 11:11:59"
承运人也需要在我们发送给他们的数据中包含一个序列号。在特定日期发送的第一个应该是 1,第二个应该是 2,依此类推。在这种情况下,记录 4 需要序列号 1,记录 5 需要序列号 2,记录 6 需要序列号 3,依此类推。
当我拉一个清单进行传输时,我只需按 ID 选择它
select * from manifests where id = 5
是否可以让 MySQL 计算上述记录的序数并将其包含在结果中?基本上我认为我需要的是计算在较早时间创建的记录数量,然后是感兴趣的记录,但这些记录也是在同一天创建的。是否有一个聚合函数可以做到这一点,或者我可以使用其他一些技巧来通过 MySQL 实现这一点?