Avatar billede iakob Nybegynder
16. juni 2008 - 17:52 Der er 7 kommentarer og
1 løsning

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å?
Avatar billede arne_v Ekspert
16. juni 2008 - 18:13 #1
prøv:

Select *
from objekthistorik oh1
where timestamp =
    (select max(timestamp) from objekthistorik oh2 where oh2.objektid=oh1.objektid)
Avatar billede HenrikSjang Nybegynder
16. juni 2008 - 19:37 #2
Den du lavede her, er tæt på:
select objektid, timestamp
from objekthistorik
group by objektid
having timestamp = max(timestamp)

Prøv med:
select objektid, max(timestamp)
from objekthistorik
group by objektid
Avatar billede iakob Nybegynder
17. juni 2008 - 08:23 #3
Sjang - jeg har brug for at hive hele rækken ud.

Arne - din løsning virker. Vil du svare så du kan få points?
Avatar billede arne_v Ekspert
17. juni 2008 - 15:32 #4
svar
Avatar billede arne_v Ekspert
29. juni 2008 - 05:22 #5
så mangler du bare at acceptere svaret
Avatar billede iakob Nybegynder
29. juni 2008 - 10:21 #6
Ja, fra firefox kan man ikke acceptere - så jeg skulle lige havde fundet en internet explorer.

Værså god - og tak for hjælpen!
Avatar billede arne_v Ekspert
29. juni 2008 - 15:08 #7
Du fik stadig ikke ram på den.

Tricket er at markere navnet ude i combo boxen til højre så det bliver blåt inden
man klikker accepter.

[spørg mig ikke om hvorfor det er lavet sådan]
Avatar billede iakob Nybegynder
04. juli 2008 - 20:16 #8
Sådan, undskyld ventetiden!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester