Ankündigung

Einklappen
Keine Ankündigung bisher.

Update aufs Datum -1 nur auf Wochentage

Einklappen

Neue Werbung 2019

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

  • Update aufs Datum -1 nur auf Wochentage

    Guten Morgen zusammen.

    Ich habe eine kleine Tabelle, die sich alle 15 Minuten aktualisiert.
    Kunde ltideal Stück kunr
    Kunde 1 15.09.2020 3 10403400
    Kunde 1 17.09.2020 5 10403400
    Kunde 2 16.09.2020 2 11300700
    Nun soll aber bei 3 Bestimmten Kunden der Liefertermin ein Tag vorher angezeigt werden. Über eine Temporäre Tabelle und einem Update Befehl klappt es rein theoretisch.

    UPDATE tt_wochen_kunde set ltideal = ltideal - 1 WHERE kunr in (10403400,10403410,10403500);

    Leider darf das Datum kein Samstag oder / und Sonntag sein. Also sollte ein Montag auf Freitag gehen.
    Hat jemand eine Idee für mich, ob ich dies lösen könnte?


    Danke.

  • #2
    Bitte bei Datenbankproblemen immer die Struktur und einige Testdaten, als Text also CREATE Statement, zur Verfügung stellen.

    Kommentar


    • #3
      Ev. hilft dir ja auch das hier: https://stackoverflow.com/questions/...g-sundays-date

      MOD: Verschoben von PHP-Einsteiger
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Zitat von Deathack Beitrag anzeigen
        Leider darf das Datum kein Samstag oder / und Sonntag sein. Also sollte ein Montag auf Freitag gehen.
        Hat jemand eine Idee für mich, ob ich dies lösen könnte?
        Mach das doch Clientseitig. Wenn da in zwei Monaten jemand auffällt, dass es auch Feiertage gibt, fängst du von vorne an.

        Kommentar


        • #5
          Zudem ist es sinnvoll dem Benutzer den Liefertermin vorab anzuzeigen und das Einverständnis einzuholen. In die Datenbank packst du dann das voraussichtliche Lieferdatum.

          Kommentar


          • #6
            Guten Tag,

            danke schon Mal für Eure Antworten.

            Ich befinde mich auf einer IBM Informix Datenbank, die im select und update Befehl sehr ähnelt.

            Dort würde ich per Script eine temporäre Tabelle erstellen (tt_wochen_kunde) mit folgenden SQL:

            Code:
            select DISTINCT(kauf.auftrnr), kauf.kunr,kauf.orgname, kauf.ltideal,
            kauf.gesst
            from kauf, kpos, artikel
            WHERE kauf.aufnr = kpos.aufnr
            AND kpos.artnr = artikel.artnr
            AND kauf.ltideal between '01.09.20' AND '07.09.20'
            AND kauf.vorgang = '5'
            AND kauf.still <> '1'
            AND artikel.atyp = "200"
            AND (kauf.kunr = '10714500'
            or kauf.kunr = '10403400'
            or kauf.kunr = '10200500')
            ORDER by kauf.kunr DESC
            into tt_wochen_kunde;
            SQL ist auf 3 Kunden Mal eingekürzt.

            @protestix: Aus diesem Grund, habe ich leider kein CREATE Statement, Das Feld ltideal ist vom Typ Date. Ich benötige nicht den richtigen Liefertermin vom Kunden und benötige auch keine Einverständnis, aber weiter unten ist die Erklärung.

            @hausi danke für den Link, aber leider hilft es mir nicht, oder ich bekomme es nicht hin.

            erc das klappt nicht Clientseitig. Es würde wöchentlich auffallen.

            Also zur allgemeinen Erklärung. Ich exportiere per Script sehr oft Daten aus der Informix Datenbank.
            Hier ist der Plan, einmal am Tag, Morgens vor Arbeitsbeginn diesen Export automatisiert zu erstellen, danach updzudaten und zu importieren.

            Die Daten sind fürs Büro interessant, nicht für den Kunden, nicht für die Produktion.
            Es wird die Stückzahl summiert je Kunde und nach dem Liefertermin angezeigt. Für die 3 Bestimmten Kunden soll der vortag aber angezeigt werden, aber halt nicht der Samstag und Sonntag, dann der Freitag.
            Ich dachte, dass es eventuell über ein Updatebefehl klappt.

            Kommentar


            • #7
              Ich exportiere per Script sehr oft Daten aus der Informix Datenbank.
              Und in welche Datenbank importierst du das dann?

              PHP-Code:
                AND kauf.ltideal between '01.09.20' AND '07.09.20' 
              Das Feld ltideal ist vom Typ Date
              wirklich?

              Für die 3 Bestimmten Kunden soll der vortag aber angezeigt werden, aber halt nicht der Samstag und Sonntag, dann der Freitag.
              Das kannst du über eine CASE Bedingung erledigen.
              Hier mal mit Mysql
              Code:
              UPDATE mytable SET delivery_expected = (
                CASE
                     WHEN DAYOFWEEK( delivery ) = 1 THEN SUBDATE(delivery, 2)
                     WHEN DAYOFWEEK( delivery ) = 7 THEN SUBDATE(delivery, 1)
                     ELSE delivery
                END
              );
              Das bezieht sich auf die Annahme das es 2 Spalten gibt, aber das geht auch mit nur einer.
              DAYOFWEEK

              und ein SQLFiddle zur Veranschaulichung.
              Ich denke jetzt solltest du das hinbekommen.

              Kommentar


              • #8
                Wenn ich Dich richtig verstanden habe und diese Daten "nur" die Grundlage für einen Export sein sollen, dann brauchst Du kein Update (und natürlich keine Temp Table), sondern nur ein Case für die 3 Kunden, wo das Datum 1 Werktag zurückberechnet wird.

                Kommentar


                • #9
                  Zitat von protestix Beitrag anzeigen
                  Und in welche Datenbank importierst du das dann?
                  Bisher in keiner. Geplant ist es für später in einer phpmyadmin zu importieren und diese dann mit PHP auszuwerten. Derzeit passiert nur ein Export, welche in Excel jeden Morgen aufgerufen wird.

                  Zitat von protestix Beitrag anzeigen
                  wirklich?
                  Ja. Ich komme an die Third Party Datenbank nur mit dem AGS Server Studio. Das Programm ist ja vom externen Dienstleister so eingestellt für die Datumsabfrage. Gefällt mir selbst nicht, aber darf ich nicht umstellen.

                  date.PNG

                  Zitat von protestix Beitrag anzeigen
                  Das kannst du über eine CASE Bedingung erledigen.
                  Hier mal mit Mysql
                  Code:
                  UPDATE mytable SET delivery_expected = (
                  CASE
                  WHEN DAYOFWEEK( delivery ) = 1 THEN SUBDATE(delivery, 2)
                  WHEN DAYOFWEEK( delivery ) = 7 THEN SUBDATE(delivery, 1)
                  ELSE delivery
                  END
                  );
                  Das bezieht sich auf die Annahme das es 2 Spalten gibt, aber das geht auch mit nur einer.
                  DAYOFWEEK

                  und ein SQLFiddle zur Veranschaulichung.
                  Ich denke jetzt solltest du das hinbekommen.
                  Vielen Dank. Ich werde mir das Mal genauer anschauen


                  Zitat von Perry Staltic Beitrag anzeigen
                  Wenn ich Dich richtig verstanden habe und diese Daten "nur" die Grundlage für einen Export sein sollen, dann brauchst Du kein Update (und natürlich keine Temp Table), sondern nur ein Case für die 3 Kunden, wo das Datum 1 Werktag zurückberechnet wird.
                  Das ist richtig. Diese sind nur für den Export gedacht. Danach wird diese Datei nur in Excel angezeigt.
                  Später möchte ich diese in phpmyadmin importieren und mit PHP eine Anzeige programmieren.

                  Kommentar


                  • #10
                    Habe nun seit letzter Woche mein Update Befehl fertig:

                    Code:
                    UPDATE iso_wochen_kunden SET ltideal = case
                                        when weekday(ltideal) in (2,3,4,5) then
                                            ltideal -1
                                        when weekday(ltideal) = 1 then
                                            ltideal - 3
                                        else
                                            ltideal
                                        end 
                    WHERE kunr in (10403400,10403410,10403500);

                    Vielen Dank für eure Hilfe!

                    Kommentar

                    Lädt...
                    X