Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL ja kuukausinumerointikysely

amuse [15.11.2011 21:23:20]

#

Yritän saada kannasta ulos tietoa joka kertoisi pvm(datetime) kentissä olevien kuukausien pienimmän ja suurimman arvon. Eli kannassa on päivämääriä jotka sijoittuvat kesään, mutta pienin kuukausi saattaa olla esim. huhtikuu (4) tai toukokuu (5) ja suurin sitten joku syksyllä.

Kokeilin seuraavalla kyselyllä, joka palauttaa tapauksessani pienin:4 ja suurin:7, vaikka vuosina 2009 ja 2010 on viimeisimmät päiväykset lokakuulla (pitäisi olla siis pienin:4 ja suurin:10). Vuonna 2011 viimeisin päiväys on heinäkuulla, josta siis muodostuu tuo 'suurin' -arvo.

SELECT Month(MIN(pvm)) AS pienin, Month(MAX(pvm)) AS suurin FROM Ajot WHERE `pvm` BETWEEN '2009-01-01' AND '2011-12-31'

Miksi noita aikaisempien vuosien suurempinumeroisia kuukauksia ei huomioita ja osaisiko joku sanoa millä nekin saattaisi mukaan?

Metabolix [15.11.2011 21:27:52]

#

Otat nyt suurimman päivämäärän (MAX(pvm)), joka on tuo 2011-07-XX. Sitten otat tästä kuukauden. Tulos on tietenkin heinäkuu.

Suomeksihan kyselysi on tällä hetkellä "kuukausi(suurimmasta(päivämäärästä))". Korjauksen voi ihan loogisesti keksiä: kyselyn pitäisi olla "suurin(kuukausi(päivämäärästä))". Erota siis ensin päivämäärästä kuukausi (MONTH(pvm)) ja ota sitten suurin näistä (MAX(MONTH(pvm))). Sama pätee luonnollisesti myös pienimpään arvoon.

Mihin tarvitset tällaista kyselyä?

amuse [15.11.2011 21:43:54]

#

Kiitos selvitysestä sain toimimaan.

Piirrän graafia jossa pylväinä on yhteenlaskettuja aikoja kuukausittain. Haluan siis selvittää ensimmäisen ja viimeisen kuukauden joille pylväät tarvitaan ja jättää siis "tyhjät" kuukaudet piirtämättä.

Metabolix [15.11.2011 22:42:56]

#

Ahaa. Jos sattumoisin haluat jättää tyhjät kuukaudet myös päiden välistä, voit käyttää suoraan kyselyä SELECT DISTINCT MONTH(pvm), jolla saat listan eri kuukausista. Jos pylväiden pituudet tulevat kohtuullisella vaivalla tietokannasta, voit hakea nekin samalla kertaa:

SELECT MONTH(pvm), COUNT(*) AS palkin_koko FROM taulu GROUP BY MONTH(pvm)

amuse [16.11.2011 01:13:40]

#

Joo, mietin aluksi tuota tyhjiä kuukausia välissä, mutta käytännössä niitä ei tule ja jos tulisikin, niin selkeämpää on, että välissä on tyhjä rako huomauttamassa, että vierekkäiset palkit eivät ole peräkkäisiä kuukausia.

Nykyisellään palkit haetaan eri kyselyillä, sillä kuukauden kohdalla on joka vuodelle oma palkkinsa ja ajattelin, että tuo on selkeämpi toteuttaa niin että joka vuosi haetaan omana kyselynään.

Nyt tarkemmin ajateltuna tuota ensimmäistä kyselyä ei varmaan tarvitsisi ollenkaan, sillä saisinhan selvitettyä tarvittavat kuukaudet noista vuosikyselyistäkin, mutta kun tuli jo toteutettua noin, niin saa ainakin toistaiseksi olla...

Grez [16.11.2011 12:36:15]

#

Joo, itse hakisin yhdellä kyselyllä kaikki kerralla jaoteltuina vuosittain ja kuukausittain ja tuloksen perusteella ottaisin pienimmän ja suurimman kuukauden. Mutta jos sen on jo toisella tavalla tehnyt, niin tuskin kannattaa alkaa mikro-optimoimaan.

Vastaus

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

Tietoa sivustosta