Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL: Keskiarvo vuoden jokaisen päivän ensimmäisistä merkinnöistä?

amuse [30.07.2013 10:28:03]

#

Minulla Loki-taulu, jossa on joinain päivinä paljon merkintöjä joinain ei lainkaan. Haluaisin tietää vuotuisen keskiarvon alkamisajoista niiden päivien ensimmäisistä merkinnöistä joilla merkintöjä on. Koko hommaa ei ole tarvetta tehdä yhdellä kyselyllä, mutta ainakin yhdeltä vuodelta haluaisin tuon keskiarvoajan kerrallaan, sillä php:llä keskiarvoajan laskeminen on varmaan monimutkaisempaa kuin suoraan kyselyllä...

Eli taulu on tälläinen:

Loki
--
pvm (date)
alkuaika (time)
loppuaika (time)

Ja tulosten tulisi olla jotain tämän tyylistä:

2013 11:45
2012 13:02
2011 12:11
jne...

Esim. tämä kysely listaa päivät ja ensimmäiset ajat, mutta millä saisin noista ajoista sen keskiarvon?

SELECT pvm, min(alkuaika) FROM `Loki` WHERE pvm BETWEEN '2013-01-01' AND '2013-12-31' GROUP BY pvm

pvm 	min( alkuaika )
2013-03-29 	13:23:00
2013-03-30 	13:23:00
2013-04-01 	13:53:00
2013-04-21 	12:03:00
2013-04-28 	14:32:00
2013-05-03 	12:55:00
...

Teuro [30.07.2013 10:31:04]

#

SELECT AVG( UNIX_TIMESTAMP( `alkuaika` ) ) AS keskiarvo
FROM `Loki`
WHERE `pvm`
BETWEEN '2013-01-01'
AND '2013-12-31'

Pahoittelut ajatuskatkoksesta. Nyt tuo tulee UNIX_TIMESTAMP muodossa, jonka voit vielä muotoilla kyselyssä sopivaan formaattiin.

Eikun sähän halusit päivien ensimmäisten aikojen keskiarvon. Tuo yllä oleva laskee kaikkien aikojen keskiarvon. Kannattaa ehkä hakea ekat ajat sekunteina ja laskea php:ä keskiarvot?

amuse [30.07.2013 10:36:18]

#

#1111 - Invalid use of group function
(poistin yhden avaavan sulun)

Hycke [30.07.2013 14:18:46]

#

Jotenkin tähän tyyliin...

select
	year(pvm) as Vuosi,
	avg(alkuaika) as avg_alkuaika
from
	(SELECT
		pvm,
		min(alkuaika) as alkuaika
	FROM
		`Loki`
	GROUP BY
		pvm) as logi

amuse [30.07.2013 15:46:08]

#

Kiitti, tällä onnistui

SELECT
	YEAR(pvm) as Vuosi,
	SEC_TO_TIME(AVG(TIME_TO_SEC(alkuaika))) as avg_alkuaika
FROM
	(SELECT pvm, min(alkuaika) as alkuaika
	FROM `Loki`
	GROUP BY pvm) as logi
GROUP BY Vuosi

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta