Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL taulujen linkitysongelma

Ansy [22.06.2016 20:25:09]

#

Pitäisi yhdistää molemmat taulut näkymään. Taulun a pvm pysyy ennallaan ja jos taulun b data on ajallisti +/- 5min lähellä, niin lasketaan keskiarvo sarakkeille c ja d.

Jos yllämainittu ei onnistu niin vain lähin vastaava aika.

Taulu a:

PVM               | a | b |
---------------------------
11-01-2016 22:10    3   4
11-01-2016 22:20    4   4
11-01-2016 22:30    4   4
11-01-2016 22:40    4   4

Taulu b:

PVM               | c | d |
---------------------------
11-01-2016 22:08    3   4
11-01-2016 22:11    4   4
11-01-2016 22:12    4   4
11-01-2016 22:22    4   4

Teuro [22.06.2016 20:47:13]

#

Millä tavalla 'Taulu a' ja 'Taulu b' rivit ovat linkissä? Siis millä ehdolla jokin Taulu a:n rivi yhdistetään Taulu b:n riviin? Onko taulujen välillä esimerkiksi jokin id-numero, jota ei ole esimerkeissä näkyvillä?

Metabolix [22.06.2016 20:57:15]

#

Kuten Teuro totesi, kysymys on epäselvästi muotoiltu.

Jos kuitenkin tarkoitus on vain hakea b-taulusta kaikki a-tauluun nähden ±5 minuutin päässä olevat jutut ja laskea niistä keskiarvo, ehkä tämä auttaa:

SELECT
 a.*,
 SUM(b.c) / COUNT(b.c) AS c_mean,
 SUM(b.d) / COUNT(b.d) AS d_mean
FROM a
LEFT JOIN b
  ON b.time BETWEEN a.time - INTERVAL 5 MINUTE AND a.time + INTERVAL 5 MINUTE
GROUP BY a.id

Jos pitää jotenkin tunnistaa, mikä a-taulun riveistä on lähimpänä b-taulun riviä, jotta samaa b-riviä ei tule käsiteltyä moneen kertaan, kyselystä tulee jossain määrin monimutkaisempi.

Toivottavasti ajat ovat taulussasi TIMESTAMP- tai DATETIME-tyyppisinä (ja näin näkyisivät yleensä muodossa 2016-06-22) eivätkä jossain omassa pöljässä tekstimuodossa.

Ansy [22.06.2016 21:56:38]

#

Elikkäs a-taulun arvot pysyvät muuttumattomana ja rinnalle tulee b-taulusta arvot +/- 5min a-taulun aikoihin nähden (keskiarvo tai lähin aika).

Kieltämättä huonosti probleeman kuvasin.

Ja kyllä ajat tulevat ihan YYYY-MM-DD HH:MM:SS muodossa. Esimerkki on vaan ihan hatusta heitetty :D

Teuro [22.06.2016 22:10:01]

#

Esimerkistäsi mikä kolmesta ensimmäisestä Taulu b:n riveistä yhdistetään Taulu a:n rivin 1 kanssa ja miksi? Kaikki kolme riviä osuvat rivin 1 kanssa viiden minuutin säännön nojalla. Rivi kaksi olisi vain minuutin päässä rivi yksi olisi kahden minuutin päässä.

Riviin kaksi Taulu a:a osuu rivi neljä Taulu b:ä, koska 11-01-2016 22:22 on vain kahden minuutin päässä 11-01-2016 22:20 muut ovat yli viiden minuutin päässä. Riveihin kolme ja neljä Taulu a:a ei osu mikään viiden minuutin säännön nojalla, joten riville kolme valitaan ilmeisesti rivi kolme ja riville neljä valitaan myös rivi kolme.

Ansy [22.06.2016 22:28:51]

#

Taulu b:n arvot ovat mittaustuloksia, joita tulee epäsäännöllisesti. Tarkoitus olisi poimia b-taulusta arvot, joilla olisi vaikutusta taulun a-arvoihin. (Eli +/- 5 min a-taulun aikaan).

Tosiaan kuten mainitsit jos monta riviä osuu kohdalle niin keskiarvolla hoidetaan se homma. Ja osumia ei välttämättä aina tosiaan ole.

Metabolix [23.06.2016 13:37:19]

#

Tarkennetun kuvauksen perusteella edellä antamani ratkaisun pitäisi olla ihan oikea.

Vastaus

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

Tietoa sivustosta