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 番目のものは 2 というようになります。この場合、レコード 4 には 1 のシーケンス番号が必要であり、レコード 5 には 2 の番号が必要であり、レコード 6 には 3 のシーケンス番号が必要です。
送信用のマニフェストをプルするときは、ID で選択するだけです
select * from manifests where id = 5
MySQL で上記のレコードの順序を計算し、それを結果に含めることは可能ですか? 基本的に、必要なのは、対象のレコードよりも前に作成されたが、同じ日に作成されたレコードの数のカウントだと思います。これを実行できる集計関数はありますか、または MySQL でこれを達成するために使用できる他のトリックはありますか?