2011-08-25 78 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 
; 

沒有進一步澄清你想要什麼,這是最好的答案我可以給。