免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3009 | 回复: 4
打印 上一主题 下一主题

求实现一个小功能的sql语句。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-11 13:10 |只看该作者 |倒序浏览
10可用积分
一个表last,如下:
id(代理商) s(销售物品编号)  t(交易时间) ........(其他字段不具体列出)

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

流程是这样的:

交易记录首先存在一个临时表中,定期把这些数据插入到正式销售记录表中(这个表很大)。
同时把这个临时表中的数据插入到last表中,用于查询最后100笔销售记录,要求last表对于某个代理商来说
最多只能保存100条最新(按交易时间)记录,这样这个last表将会很小,而且不占用太多空间,查询效率会高。
如何实现写last表这个功能?有什么好的办法,谢谢大家了。

最佳答案

查看完整内容

不是精确100条,是保持100条或略多一点,因为在边界时间点,可能正好有多条销售时间相同的记录.临时表为tinsert 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

论坛徽章:
0
2 [报告]
发表于 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 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-09-11 14:07 |只看该作者
100条数据数据随便怎么操作都不会很慢吧。

论坛徽章:
0
4 [报告]
发表于 2007-09-11 15:04 |只看该作者
谢谢回复。我只是想实现这样的要求,有没有好办法。

论坛徽章:
0
5 [报告]
发表于 2007-09-12 13:58 |只看该作者
同时把这个临时表中的数据插入到last表中

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

如果是我,LAST表会看作是一个CACHE,我会先将最新的100条交易信息取出后序列化,然后直接REPLACE INTO LAST VALUES ('代理商ID','序列');
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP