Udtræk af max for grupper af rækker i tabel
Jeg har en tabel der indeholder historiske instanser - de historiske instanser af samme "objekt" har samme objektid men forskellig timestamp (en datetime kolonne) og forskellig id (primary key).Simplificeret ser tabellen således ud:
Id int primary key,
Timestamp Datetime,
ObjektId varchar(50),
Value varchar(255)
(value er i virkeligheden en hel masse kolonner, men det er ligemeget her).
Nu har jeg brug for at lave et view som returnerer alle de gældende historiske instanser - det vil sige en række for hver ObjektId og det skal være den række med det højeste Timestamp.
Jeg har lavet den her:
Select *
from objekthistorik
where timestamp in
(select max(timestamp) from objekthistorik group by ObjektId)
Men det virker ikke - så vidt jeg kan se skal den inderste select joined på objektid med den yderste.
Denne her virker ikke - der kommer en fejl:
select objektid, timestamp
from objekthistorik
group by objektid
having timestamp = max(timestamp)
(fejlen siger:
Msg 8121, Level 16, State 1, Line 1
Column 'objekthistorik.Timestamp' is invalid in the HAVING clause because it is not contained in either an aggregate function or the GROUP BY clause.
)
Findes der en smart måde at gøre dette på?