Datetime haku

Tietokantaan lisätään 30 min välein arvot, ja tallennetaan sen hetkinen datetime.

Joskus järjestelmä oli alhalla, eikä arvoja pystytty lisäämään. Miten voisin hakea kaikki nämä päivät?

Tietokannan rakenne on:

id (int), paiva (datetime), arvo1 (int), arvo2 (int), jne..
5339
Äänestä

Muut lukivat myös

Vastaukset 5

Vanhimmat

Käsittääkseni ainoa keino on hakea tietyltäväliltä kaikki päivät (ajat) sitten vain katsoa onko kerran 30min lisätty tieto, tämä onnistuu helposti ohjelmointikielelläsi, kun et sitä kerro, niin en osaa auttaa enempää.

Siis pelkällä kyselyllä et sitä selville saa.

Äänestä
  • Ryhmitellään tiedot päivämäärän mukaan, lasketaan montako arvoa on päivää kohden, ja jos arvo on pienempi kuin 24*2 niin otetaan päivämäärä selectiin.

    Näin teoriassa, mutta miten käytännössä, en tiedä.

    Äänestä

  • outo tyyppi. kirjoitti:

    Ryhmitellään tiedot päivämäärän mukaan, lasketaan montako arvoa on päivää kohden, ja jos arvo on pienempi kuin 24*2 niin otetaan päivämäärä selectiin.

    Näin teoriassa, mutta miten käytännössä, en tiedä.

    Eipäs tullut tuo ajatus mieleen, tolleehan se onnistuukin helposti. Tässä on täysin testaamaton sql-lauseke mysliin.

    SELECT *, COUNT(id) AS monta
          FROM taulukon_nimi
          GROUP BY DATE_FORMAT(paiva, "%Y%j")
          HAVING monta < 48

    Äänestä

  • 1234 kirjoitti:

    Eipäs tullut tuo ajatus mieleen, tolleehan se onnistuukin helposti. Tässä on täysin testaamaton sql-lauseke mysliin.

    SELECT *, COUNT(id) AS monta
          FROM taulukon_nimi
          GROUP BY DATE_FORMAT(paiva, "%Y%j")
          HAVING monta < 48

    "SELECT *" ei taida toimia groupin kanssa.

    Tässä on vähän parannettu versio :)

    SELECT
    DATE_FORMAT( date, '%Y' ) AS vuosi,
    DATE_FORMAT( date, '%m' ) AS kuukausi,
    DATE_FORMAT( date, '%d' ) AS paiva,
    COUNT( id ) AS monta
    FROM taulukon_nimi
    GROUP BY vuosi, kuukausi, paiva
    HAVING monta < 48 
    LIMIT 0 , 100;

    Äänestä

  • outo tyyppi kirjoitti:

    "SELECT *" ei taida toimia groupin kanssa.

    Tässä on vähän parannettu versio :)

    SELECT
    DATE_FORMAT( date, '%Y' ) AS vuosi,
    DATE_FORMAT( date, '%m' ) AS kuukausi,
    DATE_FORMAT( date, '%d' ) AS paiva,
    COUNT( id ) AS monta
    FROM taulukon_nimi
    GROUP BY vuosi, kuukausi, paiva
    HAVING monta < 48 
    LIMIT 0 , 100;

    *"SELECT *" ei taida toimia groupin kanssa. *

    Miksi ei?
    Tolla tähdellähän valitaan vain kaikki sarakkeet näytettäväksi kyselyn tuloksessa, ei se mitenkään groupin toimintaan vaikuta. Tosin tähteähän ei kannata käyttää, vaan parempa luotella tarvittavat sarakkeet, koska kaikkia ei useinkaan tarvita, sekä jos kantaan tulee myöhemmin lisää sarakkeita ne valitaan turhaan jne.....

    Ainaskin mysli 4.1.7 toi mun kysely toimii ongelmitta. Muista kannoista en sit tiedäkkään, ja myslissähän on omat pikkujipot joten kyselyitä joutuu aina sovittamaan jos meinaa toiseen kantaan vaihtaa.


    En tosin tiedä onko toi minun kysely sql-standartin mukainen, kun siinä group lausekkeessa on date_format, tämä kai kuuluisi virallisesti sijoittaa select lauseeseen, kuten sinä olet tehnyt. Onkohan kenelläkään tästä tarkempaa tietoa?


    SELECT
    *,
    COUNT(id) AS monta,
    DATE_FORMAT(paiva, "%Y%j") AS paivays
    FROM taulukon_nimi
    GROUP BY paivays
    HAVING monta < 48

    Noin kai se pitäisi tehdä?



    Ja äkkiseltään ainoa ero minun ja sinun parannetun version välillä on, limit ;)

    Äänestä

Kommentoi aloitusta


nooooob kirjoitti:

Tietokantaan lisätään 30 min välein arvot, ja tallennetaan sen hetkinen datetime.

Joskus järjestelmä oli alhalla, eikä arvoja pystytty lisäämään. Miten voisin hakea kaikki nämä päivät?

Tietokannan rakenne on:

id (int), paiva (datetime), arvo1 (int), arvo2 (int), jne..

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu