SQL_Befehl: Ältere Ergebnisse anhand des Zeitstemples filtern

phil.drossel

Neuer Benutzer
Beiträge
2
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
 
Werbung:
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?
 
Werbung:
Zurück
Oben