Where Klausel einschränken mit Minuten und Zeit

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Where Klausel einschränken mit Minuten und Zeit

    Hi Forum,

    ich habe eine Datenbank mit vielen einzelnen Tabellen. In diesen Tabellen werden Daten gespeichert - im Viertelstundentakt.

    Die Datenbank ist ungefähr so aufgebaut:

    id | datum | uhrzeit | wert
    int| date | time | varchar
    Wie schon erwähnt werden im 15-Minutenrhytmus daten in der Datenbank gespeichert. also um 00:00:00 uhr, 00:15:00 uhr 00:30:00 uhr, 00:45:00 uhr, 01:00:00 uhr, 01:15:00 uhr usw.

    Nein es hat nichts mit der Vorratsdatenspeicherung zu tun :P

    Nun gibt es tabellen, die deshalb schon knapp 10MB groß sind (und weiter Wachsen werden). Bisher noch kein Problem (auch auf Performance sicht noch alles gut) aber Zukünftig könnte mir die Datenmengen zum Verhängniss werden. Zumal ich nur 5gb an webspace habe und die Anzahl der Tabellen in Zukunft noch wachsen wird.

    Nun möchte Ich den "Kunden" 3 Monate lang die detaillierten 15-Minuten-Values anbieten und alles was Älter ist nur noch grob aufgelöst im Stundenrhytmus (Also nur die die Werte zur vollen Stunde).

    Habe mir nun Folgendes gedacht.

    1 mal in der Woche schucke ich zur späten Stunde (mittwoch nachts irgendwann oder so) einen Cronjob an, der mir die 15-Minutenwerte die älter als 3 Monate sind löscht.

    Zu meinem Problem:
    Die Abfrage der Daten die Älter sind als 3 Monate funktioniert Problemlos und wurde von mir Folgendermaßen gelöst:

    Quellcode

    1. Select
    2. *
    3. FROM
    4. tabelle
    5. WHERE
    6. datum < date_sub(curdate(), INTERVAL 3 Month)


    Jetzt benötige ich noch eine erweiterung der WHERE Klausel, um nur die Werte zu selektieren, die nicht zur Vollen Stunde in die Datenbank geschrieben wurden. Also alle mit der "Minutenzahl" von XX:00:00 stehen zu lassen.

    Das Problem ist weiterhin das nicht immer um genau xx:00:00 geschrieben wurde sondern auch mal mit paar minuten verzögerun, so dass auch mal ein Eintrag mit XX:04:00 besteht.

    Jetzt hab ich keine Ahnung wie ich diese Bedinung richtig zu formulieren habe..

    Habe es schon mit Between und NOT BETWEEN versucht aber keinen richtigen Lösungsansatz erhalten.

    zumal

    Quellcode

    1. WHERE
    2. uhrzeit
    3. BETWEEN '%:04:00' AND '%:59:00'


    nicht funktionieren will, was an der Wildcard liegt.

    Also wie Selectiere ich nur die Werte um XX:15:00, XX:30:00, XX:45:00 und lasse dabei die XX:00:00 stehen?

    Vielen Dank schonmal für euere Hilfe

    Grüße
    Timo
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---
  • Hi d0nut,

    danke erstmal für deine Antwort.

    Stimmt aber so nicht ganz...

    Denn wenn die Minuten der Uhrzeit 0 sind (also die volle Stunde) ergibt das ergebnis ebenfals 0.

    0%15=0
    15%15=0
    30%15=0
    45%15=0

    Wollte ja eigentlich die vollen Stunden behalten und nur den Rest rauskloppen

    Habe es jetzt mit einfachen logischen Verknüpfungen gelöst, ist halt eher nicht so schön ^^

    Quellcode

    1. DELETE FROM
    2. tabelle
    3. WHERE
    4. datum < date_sub(curdate(), INTERVAL 3 Month)
    5. AND
    6. uhrzeit like '%:1%:%' OR
    7. uhrzeit like '%:3%:%' OR
    8. uhrzeit like '%:4%:%'



    Grüße Timo
    ----[Blockierte Grafik: http://www.smilie-harvester.de/smilies/Alltag/putzen.gif] Nein ich bin nicht die Signatur, ich Putz hier nur ---