sql语句优化

feixuyue 2015-10-22 06:00:56
我想查询该项目的各个设备前五期数据的平均值,但以下面的sql语句执行耗时8秒,感觉有点长,各位大大看看能不能优化;

with tabs as (select ROW_NUMBER() over(partition by a.模块ID  order by  a.时间 ) 
as rows, a.* from Data_AD a ) select 模块ID,avg(通道01),avg(通道02)
,avg(通道03),avg(通道04),avg(通道05),avg(通道06),avg(通道07),avg(通道08)
,avg(通道09),avg(通道10),avg(通道11),avg(通道12),avg(通道13),avg(通道14)
,avg(通道15),avg(通道16),avg(通道17),avg(通道18),avg(通道19),avg(通道20)
,avg(通道21),avg(通道22),avg(通道23),avg(通道24),avg(通道25),avg(通道26)
,avg(通道27),avg(通道28),avg(通道29),avg(通道30),avg(通道31),avg(通道32)
from tabs where 模块ID in ( select distinct(所属模块ID) from [MonitorPoint]
where 所属项目 = '地铁4号线站') and rows in (1,2,3,4) group by 模块ID order by 模块ID;
...全文
175 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixuyue 2015-10-23
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:


 where 模块ID in ( select distinct(所属模块ID) from [MonitorPoint] where 所属项目 = '地铁4号线站') 

-- 换成下面这句,看看
 where exists(select * from [MonitorPoint] where 所属项目 = '地铁4号线站' and 所属模块ID = tabs.模块ID) 

回复错了,谢谢
feixuyue 2015-10-23
  • 打赏
  • 举报
回复
with tabs as
(select ROW_NUMBER() over(partition by AD.模块ID  order by  AD.时间 ) as row
, AD.*  from Data_AD as AD where exists ( select * from [MonitorPoint] 
where 所属项目 = '地铁4号线站' and 所属模块ID = AD.模块ID))

select 模块ID,avg(通道01),avg(通道02),avg(通道03),avg(通道04),avg(通道05)
,avg(通道06),avg(通道07),avg(通道08),avg(通道09),avg(通道10),avg(通道11)
,avg(通道12),avg(通道13),avg(通道14),avg(通道15),avg(通道16),avg(通道17)
,avg(通道18),avg(通道19),avg(通道20),avg(通道21),avg(通道22),avg(通道23)
,avg(通道24),avg(通道25),avg(通道26),avg(通道27),avg(通道28),avg(通道29)
,avg(通道30),avg(通道31),avg(通道32)
from tabs where tabs.row in (1,2,3,4) group by 模块ID order by 模块ID;
感谢你的建议,我在此基础上进行改进。
卖水果的net 2015-10-23
  • 打赏
  • 举报
回复


 where 模块ID in ( select distinct(所属模块ID) from [MonitorPoint] where 所属项目 = '地铁4号线站') 

-- 换成下面这句,看看
 where exists(select * from [MonitorPoint] where 所属项目 = '地铁4号线站' and 所属模块ID = tabs.模块ID) 

22,300

社区成员

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

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