2012-08-13 60 views
0

我已经创建了按类别持有项目表:MySQL的:计数按类别项目

+------------+---------------------+------+-----+-------------------+----------------+ 
| Field  | Type    | Null | Key | Default   | Extra   | 
+------------+---------------------+------+-----+-------------------+----------------+ 
| id   | bigint(20) unsigned | NO | PRI | NULL    | auto_increment | 
| name  | varchar(30)   | YES |  | NULL    |    | 
| category | varchar(30)   | YES | MUL | NULL    |    | 
| timestamp | timestamp   | NO |  | CURRENT_TIMESTAMP |    | 
| data  | mediumblob   | YES |  | NULL    |    | 
+------------+---------------------+------+-----+-------------------+----------------+ 

旧数据使用sliding window technique删除,这意味着只有在每个类别中的最后一个N项目都保存在桌子。

如何跟踪每个类别的项目总数以及该类别中第一个项目的时间戳?

编辑 - COUNTMIN原始表上是行不通的,因为这是一个滑动窗口的数据结构,这意味着第一个项目已被删除。

+0

你不能创建一个包含计数器和第一个数据的表吗? – 2012-08-13 13:09:40

+0

我可以。我正在努力填充另一个表的存储过程。 – 2012-08-13 13:48:07

回答

2

显然,你需要保持一个单独的表,当你删除记录。你的表应该总结的类别,包括以下字段:

  • 第一类开始时间
  • 项目总数的类别

等。

当您去删除时,您需要更新此表。通常,我更喜欢使用存储过程来处理数据库维护,因此可以将此代码添加到存储过程。其他人更喜欢触发器,所以你可以有一个删除触发器来做同样的事情。

+0

+1这是真的。你能提供一个这样的程序大纲吗?我不熟悉存储过程语法。 – 2012-08-13 13:27:51

0

尝试SELECT count(id) FROM table GROUP BY category

+0

将无法​​工作 - 请注意,这是一个滑动窗口,因此最旧的项目将被删除。 – 2012-08-13 13:03:07