一个表的设计有关问题

一个表的设计问题
说明:表里有3个字段,id是一篇文章的id号,words是这篇文章出现的关键的词(一篇文章有3个),date这篇文章发布日期
表结构:
id words date
1 词1 20120407
1 词2 20120407
1 词3 20120407
2 词1 20120407
2 词4 20120407
2 词5 20120407
3 词1 20120407
3 词2 20120407

查询要求:统计某个时间段(date)内 words出现频率最高的前多少个id

问题所在:就现在的表不知道怎么统计的sql怎么写(大概知道用group by之类的...),2或者直接帮在下重新设计表结构都行

------解决方案--------------------
select * from (
select words,count(*)
from 表结构
where date between 某个时间段 and 某个时间段
group by words
) t
order by 2 desc limit 20
------解决方案--------------------
做了实验
建了一个表
mysql> create table book (id int primary key auto_increment,words varchar(20)
,date timestamp default CURRENT_TIMESTAMP );


mysql> insert into book values("语文,语文,语文"),("语文,语文,语文") ,("数学,语文,化学");

mysql> insert into book(words) values("数学,语文,因为") ;
Query OK, 1 row affected (0.26 sec)

mysql> insert into book(words) values("数学,语文,历史") ;
Query OK, 1 row affected (0.27 sec)

mysql> select * from book;
+----+------------------+---------------------+
| id | words | date |
+----+------------------+---------------------+
| 1 | 语文,语文,语文 | 2012-04-07 21:54:33 |
| 2 | 数学,语文,化学 | 2012-04-07 21:54:59 |
| 3 | 数学,语文,因为 | 2012-04-07 21:55:14 |
| 4 | 数学,语文,历史 | 2012-04-07 21:55:25 |
+----+------------------+---------------------+

这样能解决冗余,但是这个sql 有点不好写

如果不考虑冗余就很好写这sql
1楼就能解决。