1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

SQL_Befehl: Ältere Ergebnisse anhand des Zeitstemples filtern

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von phil.drossel, 8 Juni 2017.

  1. phil.drossel

    phil.drossel Neuer Benutzer

    Guten Tag zusammen,

    vielleicht kann mir einer von euch Profis auf den richtigen Pfad bringen, ich bin leider nicht fündig geworden.

    Ich möchte bestimmte Zeilen Filter und nicht übernehmen

    Die Tabelle hat viele Spalten und ich habe Sie schon wie folgend gefilter

    Code:
    select Seriennummer, Result , System, Time from History


    nun werden mir alle Inhalte der Spalten Angezeigt wie folgend:
    [Seriennummer] [Result] [System] [Time]
    123 Pass 2 20170120 201500
    123 Fail 1 20170120 211730
    123 Pass 1 20170120 212000

    Das Produkt mit der Seriennumer 123 wird auf dem"System 2" geprüft und besteht die Prüfung.

    Danach wird das Produkt auf dem "System 1" geprüft und besteht die Prüfung nicht. Die Prüfung erfolgt am (20170120 211730 = 20.1.2017 21:17:30Uhr).

    Anschließend wird das Gerät repariert und erneut auf dem "System 1" geprüft. Diesmal besteht das Produkt den Test mit dem Zeitstempel 20.1.2017 21:20:00.

    Das Produkt könnt eauch noch öfters geprüft werden. Es soll aber nur der letzte Dokumentierte Test abgefragt werden. Die oben dargestellte Tabelle, sollte dann wie folgende aussehen:

    [Seriennumer] [Result] [System] [Time]
    123 Pass 2 20170120 201500
    123 Pass 1 20170120 212000


    Die Seriennummern, die abgefragt werden sollen, sind vorher nicht bekannt. Der komplette Inhalt der Tabelle soll ausgewertet werden.

    Wäre super freundlich wenn mir da jemand helfen könnte.

    vg Phil
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Dazu schufen die Götter der SQL-Spezifikation die WHERE-Condition: select ... from ... WHERE Result = 'Pass'
     
  3. ukulele

    ukulele Datenbank-Guru

    Also die "einfachste" Variante ist folgende:
    Code:
    SELECT   t.[Seriennummer],h.[Result],t.[System],t.[Time]
    FROM   (
    
    SELECT   [Seriennummer],[System],max([Time]) AS [Time]
    FROM   History
    GROUP BY [Seriennummer],[System]
    
         ) t
    INNER JOIN History h
    ON     t.[Seriennummer] = h.[Seriennummer]
    AND     t.[System] = h.[System]
    AND     t.[Time] = h.[Time]
    Du ermittelst erst die Datensätze mit GROUP BY und max() und joinst dann die Spalten, nachdenen du eben nicht gruppieren kannst und die von Time abhängen.

    Wenn das wirklich MSSQL ist ginge auch folgendes:
    Code:
    SELECT   t.[Seriennummer],t.[Result],t.[System],t.[Time]
    FROM   (
    
    SELECT   ROW_NUMBER() OVER (PARTITION BY [Seriennummer],[System] ORDER BY [Time] DESC) AS zeile,
         [Seriennummer],[Result],[System],[Time]
    FROM   History
    
         ) t
    WHERE   t.zeile = 1
    oder
    Code:
    SELECT   DISTINCT
         [Seriennummer],
         FIRST_VALUE([Result]) OVER (PARTITION BY [Seriennummer],[System] ORDER BY [Time] DESC) AS [Result],
         [System],
         FIRST_VALUE([Time]) OVER (PARTITION BY [Seriennummer],[System] ORDER BY [Time] DESC) AS [Time]
    FROM   History
    Wobei ich das letztere auch noch nicht so verinnerlicht habe :)

    Was für ein merkwürdiges Format ist denn deine Datum/Zeit Spalte, VARCHAR?
     
    phil.drossel und Walter gefällt das.
  4. phil.drossel

    phil.drossel Neuer Benutzer

    @ukulele : das ist genau der Befehl, den ich gesucht habe. ;)

    Ich habe den ersten Code genommen und habe ihn noch ein bissel angepasst. Vielen Dank!!!!!

    Vg Phil
     

Diese Seite empfehlen