Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Zwei Tabellen über naheliegenden Timestamp Joinen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von GrafvonAdviller, 24 Januar 2020.

  1. GrafvonAdviller

    GrafvonAdviller Benutzer

    Hallo zusammen,
    Ich Versuche gerade eine Query zu schreiben die Tabelle Logfiles mit der TTNR aus der Tabelle TTNR anreichert.
    Gejoint müssen beide Tabellen über die Felder Area,Line,Station werden.



    Tabelle (Logfiles)

    upload_2020-1-24_2-11-57.png

    Tabelle(TTNR)
    upload_2020-1-24_2-13-32.png

    Versucht hab ich das ganze nun mit folgenden Querys...

    SELECT a.*, b.TTNR
    FROM Logfiles as a
    JOIN TTNR AS b ON a.Area = b.Area AND a.Line = b.Line AND a.Station = b.Station AND a.Station = b.Station
    WHERE b.Time_Stamp_Local = (SELECT MIN(bb.Time_Stamp_Local)
    FROM TTNR as bb
    WHERE bb.Time_Stamp_Local >= a.Start_Time_Local)

    Ergebnis:
    Nur eine einzige Zeile, diese ist aber (vieleicht auch zufällig) richtig zugeordnet

    Und diese ...

    SELECT DISTINCT a.*,
    ( SELECT TOP 1 TTNR
    FROM TTNR as b
    WHERE b.Time_Stamp_Local <= a.Start_Time_Local
    ORDER BY b.Time_Stamp_Local DESC) as TTNR
    FROM Logfiles AS a
    INNER JOIN TTNR AS b ON a.Area = b.Area AND a.Line = b.Line AND a.Station = b.Station AND a.Station = b.Station

    Ergebnis:
    Sah auf den ersten Blick ganz gut aus, allerdings sind die TTNR nicht richtig zugeordnet
     
  2. ukulele

    ukulele Datenbank-Guru

    Warum 2x a.Station = b.Station? Das kann einmal weg.

    Muss bei WHERE bb.Time_Stamp_Local >= a.Start_Time_Local eventuell nicht a.Start_Time_Local sondern b.Start_Time_Local rein? Klingt erstmal sinnvoller aber ich weiß auch nicht genau worauf du aus bist.

    Der 2te Select scheint mir eher gruselig, das würde ich weg werfen. Selbst wenn es geht ist es unnötig unperformant.
     
  3. GrafvonAdviller

    GrafvonAdviller Benutzer

    Hallo,
    Das mit dem 2x a.Station = b.Station war ein Kopierfehler, natürlich nur einmal.
    Ich benötige die TTNR zum Massage_Titel und der Time_Stamp_Local ist der erste Moment wann die TTNR auftritt.
    Jetzt würde ich über die ersten 7 Felder also Area-Tool_Poistion ist das Ganze verbunden.
    Gibt es einen Eintrag in der Tabelle Logfile möchte ich anhand des Zeitstempels die TTNR des Events bestimmen. Deshalb der Versuch über die am nächsten aber größere Zeit der Tabelle TTNR daran zu kommen.

    Nun hoffe ich man konnte einigermaßen verstehen was ich meine :)
     
  4. ukulele

    ukulele Datenbank-Guru

    Ne so ganz ist mir das nicht klar. Aufgrund der Tabellen-Schnipsel würde ich sagen die Beziehung zwischen den beiden Tabellen ist
    TTNR 1 <-> n Logfiles
    Das ist kein Deutsch.
    Ich glaube die TTNR ergibt sich aus dem Join deiner "ersten 7 Zeilen". Das würde heißen du kannst mit
    Code:
    SELECT l.*,t.TTNR
    FROM Logfiles l
    LEFT JOIN TTNR t
    ON l.Area = t.Area
    AND l.Line = t.Line
    AND l.Station = t.Station
    AND l.Station_Index = t.Station_Index
    AND l.Function_Unit = t.Function_Unit
    AND l.Working_Position = t.Working_Position
    AND l.Tool_Position = t.Tool_Position
    zu jedem Eintrag in Logfiles die zugehörige TTNR holen.

    Ob die beiden Zeitstempel Start_Time_Local und Time_Stamp_Local in einem Zusammenhang stehen und wenn ja in welchem geht aus den Daten als solches erstmal nicht hervor.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden