[SQL allgemein] SQL Abfrage

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [SQL allgemein] SQL Abfrage

    Hallo Forum,

    Ich bin gerade dabei eine Zeiterfassungssystem mit einer Datenbank zu erstellen.
    Wir bekommen morgens uns abends Einträge in die Datenbank. Es kann nicht
    verhindert werden das mehrer Einträge hintereinander in die db
    geschrieben werden.
    logZeit ist ein Timestamp und rfid_id ist der user. Es gibt einen
    morgen Bereich(von 5 bis 11) der alle Einträge zusammenfassen sollte und einen abends bereich (von 13 bis 22).Es sollte morgens bei dem zusammenfassen die späteste Zeit und abends die früheste Zeit angezeigt werden.

    (Die Zeiten sind mal nur angenommen)

    so schaut die Spalte aus:
    +---------------------+------------+
    | logZeit | rfid_id |
    +---------------------+------------+
    | 2006-12-01 06:55:00 | 1000000000 |
    | 2006-12-01 07:05:00 | 1000000000 |
    | 2006-12-01 15:30:00 | 1000000000 |
    | 2006-12-01 15:40:00 | 1000000000 |
    | 2006-12-02 06:55:00 | 1000000000 |
    | 2006-12-02 07:05:00 | 1000000000 |
    | 2006-12-02 15:30:00 | 1000000000 |
    | 2006-12-02 15:40:00 | 1000000000 |
    | 2006-12-03 06:55:00 | 1000000000 |
    | 2006-12-03 07:05:00 | 1000000000 |
    | 2006-12-03 15:30:00 | 1000000000 |
    | 2006-12-03 15:40:00 | 1000000000 |
    : :
    | 2008-12-30 06:55:00 | 1000000200 |
    | 2008-12-30 07:05:00 | 1000000200 |
    | 2008-12-30 15:30:00 | 1000000200 |
    | 2008-12-30 15:40:00 | 1000000200 |
    | 2008-12-31 06:55:00 | 1000000200 |
    | 2008-12-31 07:05:00 | 1000000200 |
    | 2008-12-31 15:30:00 | 1000000200 |
    | 2008-12-31 15:40:00 | 1000000200 |
    +---------------------+------------+


    so hätten ich gern die Spalte:
    +---------------------+------------+
    | logZeit | rfid_id |
    +---------------------+------------+
    | 2006-12-01 07:05:00 | 1000000000 |
    | 2006-12-01 15:30:00 | 1000000000 |
    | 2006-12-02 07:05:00 | 1000000000 |
    | 2006-12-02 15:30:00 | 1000000000 |
    | 2006-12-03 07:05:00 | 1000000000 |
    | 2006-12-03 15:30:00 | 1000000000 |
    +---------------------+------------+

    Für jeden Tag zwei Zeilen in einem Monat.

    ich würde mich sehr freuen wenn sich jemand für mein Problem etwas Zeit nehmen könnten.

    Vielen Dank schon mal Bentele

  • #2
    Hallo bentele
    Du musst
    1. die Zeit ohne Datum berechnen
    2. Schauen ob sie in den Zeitraum passt
    3. wenn nicht, ein festes Datum vorgeben
    4. dazu das Maximum un Minimum berechnen
    5. das ganze nach Datum (ohne Zeit!) und rfid gruppieren
    6. Im Programm die festen Datumswerte für fehlende Stempelungen berücksichtigen
    PHP-Code:
    select 
    rfid_id
    ,
    date(logzeit) as Tag,
    max(if (hour(logzeitbetween 5 and 11,logzeit,"1900-01-01")) as morgen,
    min(if (hour(logzeitbetween 13 and 22,logzeit,"2050-01-01")) as abend
    from 
    [...]
    group by Tag,rfid_id 
    Gibt jetzt allerdings 2 Spalten.
    Falls das stört musst Du eine Tabelle erstellen und mit 2x INSERT INTO die Werte in eine Spalte eintragen

    Kommentar


    • #3
      Danke Fuser!!

      deine Abfrage ist genau das was ich brauche! Die Abfrage ist auch sehr viel Performanter als wenn ich das ich die Funktion im Programm code. Programmieren hätte müssen.

      echt cool wie schnell das ging!!!

      Gruß Bentele

      Kommentar

      Lädt...
      X