[Funktion] Zeit berechnen zwischen Zeilen einer SQL-Abfrage

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

  • [Funktion] Zeit berechnen zwischen Zeilen einer SQL-Abfrage

    Hallo Zusammen,

    bin wieder auf ein für mich unlösbares Problem gestoßen. Ich möchte den Zeitraum zwischen Beginn und Ende eines Arbeitstages berechnen.
    Und zwar:

    Habe aus einer SQL-Abfrage mehrere Einträge:

    Beispiel:
    Datum|Uhrzeit|Text
    02.05.2007|05:57|Beginn
    02.05.2007|10:01|Pause
    02.05.2007|13:08|Pause
    02.05.2007|15:57|Ende

    Es kann pro Tag mehrer Schichtbeginne und Schichtenden geben. Wie kann ich jetzt per PHP ermitteln, das ich immer den ersten Eintrag eines Tages und den letzten eines Tages nehme und daraus die Zeit ermittle.

  • #2
    1. die tabellenstruktur wäre interessant.
    2. was soll "pause" bedeuten? warum nicht "pause anfang" und "pause ende"?
    3. gibt es die sicherheit, dass es immer die einträge "beginn" und "ende" geben wird? dann könntest du dich ja an denen richten.

    Kommentar


    • #3
      Es ist keine eigensentwickelte DB - ich muss die Daten so nehmen wie sie da sind.

      Es wird eigentlich nur das Pausenende in die DB gemeldet mit der Zeit in Minuten (extra Spalte "Zeit") ermittelt vom Ende der letzten Tätigkeit.

      Noch mal ein Beispiel:
      Uhrzeit - Datum - Zeit - Tätigkeit1
      Uhrzeit - Datum - Zeit - Tätigkeit2
      Uhrzeit - Datum - Zeit - Tätigkeit3
      Uhrzeit - Datum - Zeit - Pause
      Uhrzeit - Datum - Zeit - Tätigkeit4
      Uhrzeit - Datum - Zeit - Tätigkeit5
      Uhrzeit - Datum - Zeit - Schichtende

      Kommentar


      • #4
        Es kann pro Tag auch mehrmals ein Schichtbeginn und Ende geben.

        Kommentar


        • #5
          die fragen eins und drei blieben unbeantwortet.

          Kommentar


          • #6
            Tabellenstruktur:

            ERFZEIT (decimaltime)
            ZEIT (int)
            ARBEITSGANG (text)
            PERSONALNR (int)
            ERFDATUM (date)

            Kommentar


            • #7
              ...und drei?

              Kommentar


              • #8
                zu 3.) ja, wobei das auch Nachtschichten betreffen könnte

                Kommentar


                • #9
                  und was heißt das? dass der arbeitstag nach mitternacht endet?

                  Kommentar


                  • #10
                    Das heisst, das man nicht immer eine Schicht im Bereich von 00:00 - 23:59 hat, sondern dann zwei Tage berührt werden!

                    Kommentar


                    • #11
                      23:59 natürlich!

                      Kommentar


                      • #12
                        Original geschrieben von knoebi
                        Das heisst, das man nicht immer eine Schicht im Bereich von 00:00 - 23:59 hat, sondern dann zwei Tage berührt werden!
                        Auch für diesen Fall ist bei deiner Fragestellung wieder nicht definiert, wie dann verfahren werden soll.

                        Wird dann Arbeitstag 1 implizit für beendet, und der nächste implizit für begonnen erklärt?
                        Oder soll der "Arbeitstag" über Kalendertagsgrenzen hinausgehen (wenn ja, wie?)


                        All das sind Fragen, die eigentlich schon im Vorfeld gestellt und auch beantwortet worden sein müssten.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          das wird zu komplex für eine abfrage...
                          ermittle mit einer query erst mal alle einträge eines tages, laufe sie dann durch (ich nehme an, mit php), finde den ersten eintrag mit "beginn", laufe zum nächsten eintrag "ende", ermittle die zeitdifferenz. wurde "ende" nicht gefunden, muss man die einträge vom nächsten tag ermitteln, weil die nachtschicht am nächsten tag endete.

                          Kommentar


                          • #14
                            Hier noch mal ein Auszug aus einer Abfrage:

                            ERFDATUM ERFZEIT PERSONAL_EXTNR KA_BEZ ZEIT KA_NR AUFTRAGSNR
                            39204 0.2485763888907 58 Schichtbeginn 0 9197 90-0001
                            39204 0.4176157407418 58 Pause 18 9195 072002
                            39204 0.5475810185162 58 Pause 35 9195 072002
                            39204 0.7485879629603 58 Schichtende 0 9198 90-0001
                            39205 0.3405555555582 58 Schichtbeginn 0 9197 90-0001
                            39205 0.5829050925894 58 Schichtende 0 9198 90-0001
                            39205 0.5830092592586 58 Schichtbeginn 0 9197 90-0001
                            39205 0.6715856481459 58 Schichtende 0 9198 90-0001
                            39206 0.3430555555532 58 Schichtbeginn 0 9197 90-0001
                            39206 0.4419560185197 58 Pause 24 9195 072002
                            39206 0.5890393518493 58 Pause 25 9195 072002
                            39206 0.6874421296306 58 Schichtende 0 9198 90-0001
                            39209 0.3531481481477 58 Schichtbeginn 0 9197 90-0001
                            39209 0.4218981481462 58 Pause 27 9195 072002
                            39209 0.5401851851856 58 Pause 18 9195 072002
                            39209 0.7105787037071 58 Pause 1 9195 072002
                            39209 0.7427199074081 58 Schichtende 0 9198 90-0001
                            39210 0.3342708333366 58 Schichtbeginn 0 9197 90-0001
                            39210 0.4229861111089 58 Pause 20 9195 0720029

                            Kommentar

                            Lädt...
                            X