首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请大伙儿看看这sql有哪儿可以改进的

2014-01-17 
请大伙看看这sql有哪儿可以改进的数据库中有很多表,每个平台(充值平台)对应一张表,表结构共同部分如下:Use

请大伙看看这sql有哪儿可以改进的
数据库中有很多表,每个平台(充值平台)对应一张表,
表结构共同部分如下:
Username,svrId,gameid,amount,paytime 
Gameid由6位正整数组成,前面三位为游戏ID,后面三位为平台(充值平台)ID,

需要查询结果如下:
请大伙儿看看这sql有哪儿可以改进的

存储过程如下:



注意:必须是根据用户名和游戏名来分组

需求:
1、想知道有没有什么可以改进的地方,主要是经验方面的问题。
2、希望大家看看业务,这么实现是否正确。
3、新充值人数的概念就是在筛选的人员(根据游戏和用户名分组)里面,在筛选结果集之前充值的用户。例如:我选取2013-08-10到今天的用户,我得确认这些用户里面哪些在2013-08-10之前没有充值过的。


4、最后有一个比较难的问题,就是标示找出来的用户那一条记录是首充(第一次充值),结果集里面,如果某条用户的充值信息在之前没有出现过,就标示为首充,如果在之前没有充值,但是查询时间里面有多条充值,也需要标示哪一条是首充。
[解决办法]

引用:
Quote: 引用:


select username  ,  gamename  ,  min(paytime) as  paytime from 表
group by username  ,  gamename


这么简单啊,谢谢!


如果就这3列,这样写是对的,挺简单的,如果还有其他列,可以考虑用row_number函数来实现

[解决办法]
引用:
Quote: 引用:

有沒有考慮過將查詢出來的資料放到臨時表呢?


为什么要这么做?

我是覺得拼太長,不利於選擇最優執行計劃而已
[解决办法]
动态语句参数不一样或者条件不同拼接出来的语句有变化就会被重编译,而编译的时间可能远远大于执行的时间。建议一般不要使用动态语句

热点排行