jan1986
Goto Top

SQL Abfrage - Akuellster Datensatz

Hallo zusammen,

ich bastele gerade an einer automatischen Gestellverwaltung. Dazu speichert unser ERP System alle Aktionen in einer Tabelle "Rackhistory". Beispieldaten im Anhang.

Statechange=0 zurückerhalten
Statechange=1 abgegeben
Statechange=0 Abholbereit

für die benachrichtigung muss ich mir eine Tabelle bauen. Filter auf Statechange=1 wäre ja prinzipiell richtig, aber dann erwische ich auch alle Gestelle die irgendwann mal auf abgegeben standen da die tabelle ja einen Verlauf abbildet.

Habe schon mit max(date) probiert aber ich komme da nicht vorwärts. Vielleicht kann ja jemand helfen.


Gruß jan
unbenannt

Content-ID: 488904

Url: https://administrator.de/contentid/488904

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

NordicMike
NordicMike 26.08.2019 um 15:37:12 Uhr
Goto Top
Du willst nur den einen letzten Datensatz mit der 1?
Das ist der mit der höchsten ID Nummer oder dem letzten Datum.

Select * from xxxx where statechange=1 order by id desc count 1;


order by id = reihenfolge nach id nummer
desc = anders herum, größte ID nummer zuerst
count 1 = nur den ersten Eintrag zeigen.

Das ist nur aus der Erinnerung heraus geholt, die Syntax mussst Du noch überprüfen.
TheJoker2305
TheJoker2305 26.08.2019 um 16:11:44 Uhr
Goto Top
Einmne weitere Tabelle ist nicht nötig. Eine View sollte es auch tun.

Greetz thejoker2305
GrueneSosseMitSpeck
GrueneSosseMitSpeck 26.08.2019 um 23:23:20 Uhr
Goto Top
Zitat von @NordicMike:

Du willst nur den einen letzten Datensatz mit der 1?
Das ist der mit der höchsten ID Nummer oder dem letzten Datum.

Select * from xxxx where statechange=1 order by id desc count 1;


order by id = reihenfolge nach id nummer
desc = anders herum, größte ID nummer zuerst
count 1 = nur den ersten Eintrag zeigen.

Das ist nur aus der Erinnerung heraus geholt, die Syntax mussst Du noch überprüfen.
Select top 1 * from xxxx where statechange=1 order by id desc;

@Jan1986 du hast in deiner Frage einen Fehler drin, bei dir haben zwei Zustände jeweils die 0 und einer eine 1, aber in der Tabelle gibt s 0,1,2
ukulele-7
Lösung ukulele-7 27.08.2019 aktualisiert um 11:21:22 Uhr
Goto Top
Ich glaube gesucht wird eher soetwas:
SELECT t.*
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY RackRef ORDER BY Date DESC) AS zeile,*
FROM deineTabelle
) t
WHERE t.zeile = 1
AND statechange = 1