34,593
社区成员
发帖
与我相关
我的任务
分享
declare @d datetime
set @d=getdate()
DECLARE @userid int
DECLARE @startsj datetime
DECLARE @endjs datetime
SET @userid =1
SET @startsj ='2011-03-31 00:00:00'
SET @endjs ='2015-03-31 00:00:00'
SELECT
下级代理名=(select top 1 i_用户名 FROM T_会员 WHERE i_用户id=A.i_下级代理id),
下级占成金额=(select SUM(i_本级占成所得) FROM T_代理报表 WHERE i_本级代理id=A.i_下级代理id AND i_结单时间 between @startsj AND @endjs),
下级退佣金额=(select SUM(i_本级退佣金额) FROM T_代理报表 WHERE i_本级代理id=A.i_下级代理id AND i_结单时间 between @startsj AND @endjs),
下级赚佣金额=(select SUM(i_本级赚佣金额) FROM T_代理报表 WHERE i_本级代理id=A.i_下级代理id AND i_结单时间 between @startsj AND @endjs),
下级盈亏=(select SUM(i_本级盈亏) FROM T_代理报表 WHERE i_本级代理id=A.i_下级代理id AND i_结单时间 between @startsj AND @endjs),
本级交上级=(select SUM(i_本级交上级) FROM T_代理报表 WHERE i_本级代理id=A.i_下级代理id AND i_结单时间 between @startsj AND @endjs),
SUM(i_会员购买金额) AS 会员购买金额,
SUM(i_本级占成所得) AS 本级占成所得,
SUM(i_本级退佣金额) AS 本级退佣金额,
SUM(i_本级赚佣金额) AS 本级赚佣金额,
SUM(i_本级盈亏) AS 本级盈亏,
SUM(i_本级交上级) AS 本级交上级
FROM T_代理报表 A
WHERE A.i_本级代理id=@userid
AND (A.i_结单时间 between @startsj AND @endjs)
GROUP BY
A.i_本级代理id,
A.i_下级代理id
select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())
CREATE INDEX IX_i_T_代理报表_结单时间_i_本级代理 ON T_代理报表 (i_结单时间,i_本级代理id,i_下级代理id)
INCLUDE (i_本级占成所得,i_本级退佣金额,i_本级赚佣金额,i_本级盈亏,i_本级交上级)
还有创建这个索引,这个数据量单纯的给结单时间加索引没有意义SELECT 下级代理名 = (
SELECT TOP 1 i_用户名 FROM T_会员 WHERE i_用户id = A.i_下级代理id
)
, SUM(app.下级占成金额)AS 下级占成金额
, SUM(app.下级退佣金额)AS 下级退佣金额
, SUM(app.下级赚佣金额)AS 下级赚佣金额
, SUM(app.下级盈亏)AS 下级盈亏
, SUM(app.下级交上级)AS 本级交上级
, SUM(i_本级占成所得) AS 本级占成所得
, SUM(i_本级退佣金额) AS 本级退佣金额
, SUM(i_本级赚佣金额) AS 本级赚佣金额
, SUM(i_本级盈亏) AS 本级盈亏
, SUM(i_本级交上级) AS 本级交上级
FROM T_代理报表 A JOIN (
SELECT i_本级代理id
, SUM(i_本级占成所得) AS 下级占成金额
, SUM(i_本级退佣金额) AS 下级退佣金额
, SUM(i_本级赚佣金额) AS 下级赚佣金额
, SUM(i_本级盈亏) AS 下级盈亏
, SUM(i_本级交上级) AS 下级交上级
FROM T_代理报表
WHERE i_结单时间 BETWEEN @startsj AND @endjs
GROUP BY i_本级代理id
) app
ON A.i_下级代理id=app.i_本级代理id
WHERE A.i_本级代理id = @userid
AND ( A.i_结单时间 BETWEEN @startsj AND @endjs )
GROUP BY A.i_本级代理id, A.i_下级代理id
这样呢?