Chinaunix

标题: 求实现一个小功能的sql语句。 [打印本页]

作者: hh11    时间: 2007-09-11 13:10
标题: 求实现一个小功能的sql语句。
一个表last,如下:
id(代理商) s(销售物品编号)  t(交易时间) ........(其他字段不具体列出)

表中有多个代理商,对应多个销售物品编号,
这个表是用来记录某个代理商最后100笔销售记录的。

流程是这样的:

交易记录首先存在一个临时表中,定期把这些数据插入到正式销售记录表中(这个表很大)。
同时把这个临时表中的数据插入到last表中,用于查询最后100笔销售记录,要求last表对于某个代理商来说
最多只能保存100条最新(按交易时间)记录,这样这个last表将会很小,而且不占用太多空间,查询效率会高。
如何实现写last表这个功能?有什么好的办法,谢谢大家了。
作者: zhangshebao    时间: 2007-09-11 13:10
不是精确100条,是保持100条或略多一点,因为在边界时间点,可能正好有多条销售时间相同的记录.
临时表为t
insert into last select * from t;
create temporary table temp_t
   select l1.id,l1.t,count(*) from last l1,last l2
      where l1.id in (select distinct id from t) and l1.id=l2.id and l1.t<=l2.t
         group by l1.id,l1.t having count(*)<=100;
delete from last
   where id in (select distinct id from t) and
        t<(select max(t) from temp_t where id=last.id);
drop table temp_t;

[ 本帖最后由 zhangshebao 于 2007-9-20 20:40 编辑 ]
作者: sunnyfun    时间: 2007-09-11 14:07
100条数据数据随便怎么操作都不会很慢吧。
作者: hh11    时间: 2007-09-11 15:04
谢谢回复。我只是想实现这样的要求,有没有好办法。
作者: millken    时间: 2007-09-12 13:58
同时把这个临时表中的数据插入到last表中

这个操作时,先删除last表中关于此代理商的交易信息,然后插入最新100条的交易信息即可。

如果是我,LAST表会看作是一个CACHE,我会先将最新的100条交易信息取出后序列化,然后直接REPLACE INTO LAST VALUES ('代理商ID','序列');




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2