2011-08-25 52 views
1

在以下情况下,我需要您的帮助。sql表中的数据平均值

我在该表的表ChartData

我有大量的记录按以下

PK,ProjectID,MAchineId,Powervalue,PowerData 
1  1   1   20.5  2011-07-05 12:00:00  
2  1   1   21.5  2011-07-05 12:01:00 
3  1   1   22.5  2011-07-05 12:02:00 
4  1   1   23.5  2011-07-05 12:03:00 
5  1   1   24.5  2011-07-05 12:04:00 

6  1   1   25.5  2011-07-05 12:05:00  
7  1   1   26.5  2011-07-05 12:06:00 
8  1   1   27.5  2011-07-05 12:07:00 
9  1   1   26.5  2011-07-05 12:08:00 
10  1  1   28.5  2011-07-05 12:09:00 

输出

PK,ProjectID,MAchineId,Powervalue(Avg value of power),PowerData 

1  1   1   20.5   2011-07-05 12:00:00  
6  1   1   25.5   2011-07-05 12:05:00  

任何帮助,将不胜感激。提前致谢。

+3

为什么按5行分组? PK中的差距呢?它是按日期时间值分组的?如果是的话,丢失间隔怎么办? – gbn

回答

0

我想你想聚合每五个元组?如果是这样,也许这样的事情会有所帮助:

SELECT PK, ProjectID, MachineID, AVG(Powervalue), PowerData FROM table GROUP BY (PK-1)/5

虽然我真的不知道,如果你能做到这一点与GROUP BY

@gbn:我想直接回答您的意见,但我认为我缺乏特权。你能解释为什么除了MySql之外,它会失败吗?

+0

如果PK中有间隙?由于聚合语法不正确,这将在除MySQL之外的每个平台上都失败。而在MySQL上,它不会给OP提到的输出...... – gbn

0

你只是想要平均功率值?

SELECT PK,ProjectID,MachineID, AVG(PowerValue), PowerData FROM ChartData 

如果您想例如希望每台机器平均powervalue,这将成为查询:

SELECT PK,ProjectID,MachineID, AVG(PowerValue), PowerData FROM ChartData GROUP BY MachineID 
+0

由于不正确的聚合语法,在除MySQL以外的每个平台上都会失败。而在MySQL上,它不会给OP提到的输出。 – gbn

+0

这很难理解OP的问题。它不像他在问什么。 – TJHeuvel

+0

@TJHeuvel我想这样,但每五分钟。 –

2
Select * from ChartData where PK=1 or PK=6 

你没有做任何的平均值,据我知道

0

选择每5个记录(T-SQL)。

select 
     ch.* 
    from 
     (select 
       row_number() over (order by pk asc) as r, 
       pk 
      from 
       chartdata 
     ) as r 
     inner join chartdata as ch 
      on r.pk = c.pl 
    where 
     (r.r-1)%5 = 0 
; 

没有进一步澄清你想要什么,这是最好的答案我可以给。