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;
...全文
142 3 打赏 收藏 举报
写回复
3 条回复
切换为时间正序
当前发帖距今超过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) 

  • 打赏
  • 举报
回复
发帖
疑难问题

2.1w+

社区成员

MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
加入社区
帖子事件
创建了帖子
2015-10-22 06:00
社区公告
暂无公告