Problem mit Erstellung einer View
Hallo @all,
ich finde für folgendes Problem keine Lösung:
Gegeben ist eine Tabelle mit zwei Spalten ([ObjektID] als Integer, [TermineEVT] als Datetime).
Gesucht werden die letzten zwei [TermineEVT] zu einer [ObjektID] als Spalten (für die Berechnung von Differenzen).
Also rauskommen sollte Etwas in der Form:
[ObjektID] [LetztesDatum] [VorletztesDatum]
folgendes Statement würde das liefern:
Ergebnis:
Leider könnte ich das nur ObjektID für ObjektID erledigen (ginge evtl. über eine UDF).
Ich benötige aber eine View mit allen Objekten.
Mit
bekomme ich nur:
Ich benötige jedoch nur die gelb markierten Zeilen. Also den Datensatz zu jeder ID mit der MAX(LetztesDatum)
Ich kriege es ums verr... nicht gebacken.
Hat jemand von Euch eine Idee ? (Und ja, ich habe Tante google befragt, aber die Frage war wohl falsch gestellt.)
Zielsystem wäre MS-SQL2014.
Vielen Dank im Voraus
Frank
ich finde für folgendes Problem keine Lösung:
Gegeben ist eine Tabelle mit zwei Spalten ([ObjektID] als Integer, [TermineEVT] als Datetime).
Gesucht werden die letzten zwei [TermineEVT] zu einer [ObjektID] als Spalten (für die Berechnung von Differenzen).
Also rauskommen sollte Etwas in der Form:
[ObjektID] [LetztesDatum] [VorletztesDatum]
folgendes Statement würde das liefern:
SELECT TOP 1 ObjektID, MAX(EVT) AS LetztesDatum,
(SELECT MAX(EVT) AS MaxVonEVT
FROM dbo.TermineEVT AS i
WHERE (ObjektID = o.ObjektID) AND (EVT < o.EVT)) AS VorletztesDatum
FROM dbo.TermineEVT AS o
WHERE objektid = 2121
GROUP BY ObjektID, EVT
ORDER BY LetztesDatum DESC
Leider könnte ich das nur ObjektID für ObjektID erledigen (ginge evtl. über eine UDF).
Ich benötige aber eine View mit allen Objekten.
Mit
SELECT ObjektID, MAX(EVT) AS LetztesDatum,
(SELECT MAX(EVT) AS MaxVonEVT
FROM dbo.TermineEVT AS i
WHERE (ObjektID = o.ObjektID) AND (EVT < o.EVT)) AS VorletztesDatum
FROM dbo.TermineEVT AS o
GROUP BY ObjektID, EVT
ORDER BY objektID, LetztesDatum DESC
Ich benötige jedoch nur die gelb markierten Zeilen. Also den Datensatz zu jeder ID mit der MAX(LetztesDatum)
Ich kriege es ums verr... nicht gebacken.
Hat jemand von Euch eine Idee ? (Und ja, ich habe Tante google befragt, aber die Frage war wohl falsch gestellt.)
Zielsystem wäre MS-SQL2014.
Vielen Dank im Voraus
Frank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 386510
Url: https://administrator.de/contentid/386510
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
8 Kommentare
Neuester Kommentar
Möglicherweise so?
Edit: Doch, das sollte funktionieren.
SELECT ObjektID, [EVT] AS LetztesDatum,
(SELECT MAX([EVT]) AS MaxVonEVT
FROM [TermineEVT] AS T3
WHERE (T3.ObjektID = T1.ObjektID) AND (T3.[EVT] < T1.[EVT])) AS VorletztesDatum
FROM [TermineEVT] AS T1
WHERE [EVT] IN (SELECT TOP 1 Max(EVT) FROM [TermineEVT] AS T2 WHERE T2.ObjektID = T1.ObjektID)
Edit: Doch, das sollte funktionieren.
Hallo Frank,
bischen spät, ich weiß, aber probier es mal hiermit:
Gruß, Mad Max
bischen spät, ich weiß, aber probier es mal hiermit:
select ObjektID,
LetztesDatum,
(select top (1) EVT from TermineEVT where ObjektID = o.ObjektID and EVT < o.LetztesDatum order by EVT desc) as VorletztesDatum
from (select ObjektID,
max (EVT) as LetztesDatum
from TermineEVT
group by ObjektID) o
Gruß, Mad Max