| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3008 人关注过本帖
标题:这个sql怎么优化,查询每月最早的一条记录,数据量有点大
只看楼主 加入收藏
z82100
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-3-1
结帖率:0
收藏
已结贴  问题点数:20 回复次数:5 
这个sql怎么优化,查询每月最早的一条记录,数据量有点大
batch_no  serial   trans_date   pay_acct_no   trans_amt .........(省略)
  666      789     2015-06-07     123456        6.55
  666      788     2015-06-07     123456        67.5
  777      123     2015-06-10     123456        63.55

数据大概是这样的,要取出每个月同一个账号最早的那一条记录,同一天batch_no  serial 用这两个字段判断。

本菜鸡写的sql是这样的。。。。
select c.trans_date, c.trans_amt
  from xxxxxx c
  where c.app_code = '123'
  and c.trans_date < date'2015-07-01'
  and c.trans_date > date'2015-06-01'
  and ((c.response = '0003' and c.respdesc like'%欠费%')
    or (c.response = '0021' and c.respdesc like'%透支%'))
  and not exists (select 1 from xxxxxx
          where pay_acct_no = c.pay_acct_no
          and (trans_date < c.trans_date
            or (batch_no < c.batch_no
                or(batch_no = c.batch_no and serial < c.serial))));
跑了好久才出来100条数据,求大牛指点指点。。。。
 
图片附件: 游客没有浏览图片的权限,请 登录注册

2016-03-01 17:29
adxing0514
Rank: 2
等 级:论坛游民
威 望:3
帖 子:4
专家分:18
注 册:2016-3-1
收藏
得分:10 
按照你说的要求,感觉很好写,直接 select top(1) * from xxxx  where date between '' and ''   group by 账号  order by date

但是看你下面写的,不是很明白.

我也新手,多多指教
2016-03-02 08:56
z82100
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-3-1
收藏
得分:0 
回复 2楼 adxing0514
不对诶,top(1)是所有记录的第一条了,要求的是每个账号,即每个pay_acct_no的第一条,比如A账号有10条记录,B账号有50条记录,C账号有10条记录,要取出ABC各自最早的那一条
2016-03-02 10:26
adxing0514
Rank: 2
等 级:论坛游民
威 望:3
帖 子:4
专家分:18
注 册:2016-3-1
收藏
得分:0 
实验了好久,只弄出来了一个 select 账号,min(date) from xxxx where date between '' and '' group by 账号

我也新手,也在摸索,这个语句的话,只能查询出来2列
2016-03-02 13:21
z82100
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-3-1
收藏
得分:0 
回复 4楼 adxing0514
解决了,用row_number() OVER (PARTITION BY c.pay_acct_no ORDER BY c.trans_date,c.batch_no,c.serial),但是又遇到问题了。proc编译的时候row_number()报错
2016-03-02 14:33
不归散人
Rank: 2
等 级:论坛游民
帖 子:18
专家分:27
注 册:2016-2-17
收藏
得分:10 
问一下,serial字段是怎么增加的,按时间吗,每写一条加1?
2016-03-08 23:15
快速回复:这个sql怎么优化,查询每月最早的一条记录,数据量有点大
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042969 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved