Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Timestamp Differenz einer Spalte errechnen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Timestamp Differenz einer Spalte errechnen

    Hallo habe in einer Spalte die Startzeiten stehen.
    Nun möchte ich die Differenz zur Vorhergehenden erechen.

    Habe eine Seite gefunden welches mein Problem direkt behandelt, aber es funktioniert leider nicht.

    http://de.depconline.com/299163

    Hab den Code auf mein Statement angewandt
    Code:
    SELECT
        DTTestStart,
        time_diff,
        TIME_TO_SEC(time_diff) > 30 AS alarm
    FROM (
        SELECT
            DTTestStart,
            TIMEDIFF(DTTestStart, @prev_DTTestStart) AS time_diff,
            @prev_DTTestStart := DTTestStart AS prev_DTTestStart
        FROM `pcbtable`, `lottable`, `bgtable`
        where (pcbtable.LOTINDEX = lottable.LOTINDEX) and
    		(pcbtable.PCBBGIndex = bgtable.BGIndex)
    		and TestState in (1,2,4,6,7) and  LOT =  18530
    
        (SELECT @prev_DTTestStart := NULL) AS vars
        ORDER BY DTTestStart ASC
    ) AS tmp;
    Mit dem Ergebnis

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT @prev_DTTestStart := NULL) AS vars
    ORDER BY DTTestStart ASC
    ) AS t' at line 15

  • #2
    Zitat von cmeckler Beitrag anzeigen
    Hallo habe in einer Spalte die Startzeiten stehen.
    Nun möchte ich die Differenz zur Vorhergehenden erechen.
    Also Du hast z.B.:

    Code:
    test=*# select * from cmeckler ;
     row_number |              ts
    ------------+-------------------------------
              1 | 2014-07-10 21:13:31.551321+02
              2 | 2014-07-10 21:14:09.211758+02
              3 | 2014-07-10 21:14:29.268023+02
              4 | 2014-07-10 21:15:23.609087+02
              5 | 2014-07-10 21:16:00.265237+02
              6 | 2014-07-10 21:20:29.247027+02
              7 | 2014-07-10 21:20:56.38551+02
              8 | 2014-07-10 21:21:03.963662+02
              9 | 2014-07-10 21:22:00.842256+02
             10 | 2014-07-10 21:23:21.31225+02
    (10 rows)
    und suchst:

    Code:
    test=*# select *, ts - lag(ts) over (order by row_number) as differenz from cmeckler ;
     row_number |              ts               |    differenz
    ------------+-------------------------------+-----------------
              1 | 2014-07-10 21:13:31.551321+02 |
              2 | 2014-07-10 21:14:09.211758+02 | 00:00:37.660437
              3 | 2014-07-10 21:14:29.268023+02 | 00:00:20.056265
              4 | 2014-07-10 21:15:23.609087+02 | 00:00:54.341064
              5 | 2014-07-10 21:16:00.265237+02 | 00:00:36.65615
              6 | 2014-07-10 21:20:29.247027+02 | 00:04:28.98179
              7 | 2014-07-10 21:20:56.38551+02  | 00:00:27.138483
              8 | 2014-07-10 21:21:03.963662+02 | 00:00:07.578152
              9 | 2014-07-10 21:22:00.842256+02 | 00:00:56.878594
             10 | 2014-07-10 21:23:21.31225+02  | 00:01:20.469994
    (10 rows)
    Einfach, oder?
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Das "(Select..." gehört auch in die FROM Klausel.

      Kommentar


      • #4
        Zitat von erc Beitrag anzeigen
        Das "(Select..." gehört auch in die FROM Klausel.
        Hallo steh grad auf dem Schlauch, wie meinst du das?
        Wie soll das Statement aussehen?

        @akretschmer
        die LAG() Funktion ist in MySQL leider nicht verfügbar.
        Scheinbar gibt es so etwas nur bei Oracle und MSSQL

        FUNCTION lag does not exist, Fehlernummer 1305

        Kommentar


        • #5
          Zitat von cmeckler Beitrag anzeigen
          Wie soll das Statement aussehen?
          So wie auf der verlinkten Seite? Der Subquery der im Fehler steht muss in die FROM Klausel und nicht ins WHERE.

          Kommentar


          • #6
            OK, jetzt hab ich den Fehler gefunden, und zwar die Where Klausel stand in der From Klausel, weil die
            (SELECT @prev_DTTestStart := NULL) AS vars eine Tabelle ist.
            Daher muss das Statement so aussehen:
            Code:
            SELECT
                DTTestStart,
                time_diff,
                TIME_TO_SEC(time_diff) > 30 AS alarm
            FROM (
                SELECT
                    DTTestStart,
                    TIMEDIFF(DTTestStart, @prev_DTTestStart) AS time_diff,
                    @prev_DTTestStart := DTTestStart AS prev_DTTestStart
                FROM `pcbtable`, `lottable`, `bgtable`,
            
            
                (SELECT @prev_DTTestStart := NULL) AS vars
            
            where (pcbtable.LOTINDEX = lottable.LOTINDEX) and
            		(pcbtable.PCBBGIndex = bgtable.BGIndex)
            		and TestState in (1,2,4,6,7) and  LOT =  18530
            
                ORDER BY DTTestStart ASC
            ) AS tmp;

            Kommentar


            • #7
              Das was akretschmer verwendet hat ist PostgreSQL, ist wirklich zu empfehlen es zu nutzen!

              Kommentar


              • #8
                Hi, hab leider ab und zu ein Negatives Ergebnis bei Time diff?
                DTTestStart -> time_diff

                2014-08-13 04:16:54 -> NULL
                2014-08-13 04:17:52 -> 00:00:58
                2014-08-13 06:09:05 -> -08:26:25
                2014-08-13 08:31:29 -> 02:22:24

                Kommentar


                • #9
                  Zitat von cmeckler Beitrag anzeigen
                  Hi, hab leider ab und zu ein Negatives Ergebnis bei Time diff?
                  Antwort #2 und #7.
                  PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                  Kommentar


                  • #10
                    ^^ der ist Gut, doch leider bin ich gezwungen die Daten aus der MySQL DB auszulesen.

                    Kommentar


                    • #11
                      Zitat von cmeckler Beitrag anzeigen
                      ^^ der ist Gut, doch leider bin ich gezwungen die Daten aus der MySQL DB auszulesen.
                      Tja, man kann im Leben nicht alles haben, gell?
                      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                      Kommentar

                      Lädt...
                      X