高级查询优化 先谢谢了 有分

wyshdiy 2008-11-05 01:13:47
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


-- =============================================
-- Author: <Author,,wang.ys>
-- Create date: <Create Date,,2008-10-31>
-- Description: <Description,,获取数据>
-- =============================================
ALTER PROCEDURE [dbo].[GetDailyTrafficByChannelIdAndDate]
@cid int,
@startTime datetime,
@endTime datetime
AS
BEGIN
SET NOCOUNT ON;


select
cooperId = @cid
,min(fileid)as mediafileid
,watchTime=dateadd(s,(datediff(s,@startTime,date))/60*60,@startTime)
,avgBitrate =
( select avg(Avgbandwidth) from logs
where date <=dateadd(s,(datediff(s,@startTime,a.date))/60*60,@startTime)
and dateadd(s,[x-duration],date)>=dateadd(s,(datediff(s,@startTime,a.date))/60*60,@startTime))

,duration =1
,TotalTraffic =
( select sum(Avgbandwidth)from logs
where date <= dateadd(s,(datediff(s,@startTime,a.date))/60*60,@startTime)
and
dateadd(s,[x-duration],date) > dateadd(s,-5, (dateadd(s,(datediff(s,@startTime,a.date))/60*60,@startTime)))
)
,MaxTraffic=
(select sum(Avgbandwidth) from logs
where date <=dateadd(s,(datediff(s,@startTime,a.date))/60*60,@startTime)
and dateadd(s,[x-duration],date)>=dateadd(s,(datediff(s,@startTime,a.date))/60*60,@startTime)
)
from logs a
where date between @startTime and @endtime and cid = @cid and status = 0
group by (datediff(s,@startTime,date))/60,fileid

END

...全文
125 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jianglihua1986 2008-11-17
  • 打赏
  • 举报
回复
xue xi
wyshdiy 2008-11-05
  • 打赏
  • 举报
回复
在线等
wyshdiy 2008-11-05
  • 打赏
  • 举报
回复
这个是每隔60秒做为1条数据 。 然后计算这60秒内的平均流量 最大流量 和总流量。
wyshdiy 2008-11-05
  • 打赏
  • 举报
回复
那样 取的值都是同一个值。。
beifangke 2008-11-05
  • 打赏
  • 举报
回复
1先设几个变量,把求和,求平均值先求出来
2再通过变量取值
wyshdiy 2008-11-05
  • 打赏
  • 举报
回复
用我这个方法查询时间从0点 到24点的数据要查5分钟 不能忍受。。 望高手赐教。
wyshdiy 2008-11-05
  • 打赏
  • 举报
回复
我要从几百万的数据中进行这样筛选 速度很慢 请大家帮忙给优化下。。 谢谢

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧