Vinnaren i pepparkakshustävlingen!
2008-10-04, 23:45
  #1
Medlem
voyager838s avatar
Har datavärden loggade vart 2 minuters intervall.
och ska under varje 10 min ta ut medelvärdet av dessa.

Hur gör man detta i ett enda stycke, dvs i en enda SQL fråga, utan att behöva skriva miljontals med frågor för att få fram detta ?

Någon som har en ide ?


Exempelvis

tid | värde
------------
2 1
4 2
6 3
8 3
10 5
(ta ut medelvärdet av värde från tid 2 till 10)
12 3
14 12
16 33
18 2
20 1
(ta ut medelvärdet av värde från 12 till 20)

etc


Tack
Citera
2008-10-05, 22:17
  #2
Medlem
Borde du inte kunna använda GROUP BY kombinerat med någon uträkning som plockar var tionde minut - typ floor(tid/10)?

Kod:
SELECT AVG(värde) 
FROM tabellen 

GROUP BY
FLOOR(tid/10)

EDIT: Vill du att den ska räkna minut 10, 20, 30 osv till gruppen innan får du köra FLOOR((tid-1)/10) eller något liknande. 10/10 blir ju som bekant 1.
__________________
Senast redigerad av jakeWins 2008-10-05 kl. 22:24.
Citera
2008-10-06, 09:37
  #3
Medlem
voyager838s avatar
Citat:
Ursprungligen postat av jakeWins
Borde du inte kunna använda GROUP BY kombinerat med någon uträkning som plockar var tionde minut - typ floor(tid/10)?

Kod:
SELECT AVG(värde) 
FROM tabellen 

GROUP BY
FLOOR(tid/10)

EDIT: Vill du att den ska räkna minut 10, 20, 30 osv till gruppen innan får du köra FLOOR((tid-1)/10) eller något liknande. 10/10 blir ju som bekant 1.

Tack för svaret, något fint gör den, det ser dessvärre ut som den inte räknar medelvärdet på de 5 första eller 5 nästa, utan medelvärdet på något annat sätt. Udda, vet inte hur man ska få till detta.
Citera
2008-10-06, 11:35
  #4
Medlem
Hmm, jag har inte så mycket mer att ge - hinner inte riktigt kika på det.. Kolla in mySQL's dokumentation för GROUP BY, det är definitivt min FLOOR(tid/10) som felar, där kan du kanske få några pekpinnar.
Citera
2008-10-06, 11:37
  #5
Medlem
gadzooxs avatar
Citat:
Ursprungligen postat av voyager838
Tack för svaret, något fint gör den, det ser dessvärre ut som den inte räknar medelvärdet på de 5 första eller 5 nästa, utan medelvärdet på något annat sätt. Udda, vet inte hur man ska få till detta.
Handlar det inte bara om datatyper då?

Kod:
SELECT
	FLOOR((tid-1)/10) AS period
	,AVG(CAST(varde as decimal)) AS medelvärde
FROM test

GROUP BY
FLOOR((tid-1)/10)

Ger med ditt exempeldata:
Kod:
0	2.800000
1	10.200000
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback