Avatar billede bhn.314 Nybegynder
11. november 2003 - 14:42 Der er 6 kommentarer og
1 løsning

Seneste tid for et id

Jeg har set mig totalt blind på nedenstående tabelstruktur tblA og tblB bindes sammen af tblAB (klassisk).

tblA
=========
person_id
=========
1
2

tblAB
===================================
person_id | status_id | status_time
===================================
1        | 75        | 2003-01-06
1        | 32        | 2003-01-08
1        | 75        | 2003-01-10
2        | 75        | 2003-01-13
2        | 32        | 2003-01-21

tblB
=========
status_id
=========
32
75

PROBLEMET ER at jeg skal bruge det seneste 'status_time' for HVERT 'person_id'. Altså skal resultatet af query'en være:

===================================
person_id | status_id | status_time
===================================
1        | 75        | 2003-01-10
2        | 32        | 2003-01-21
Avatar billede psv Nybegynder
11. november 2003 - 14:45 #1
select person_id, max(status_time)
from tblAB
group by person_id
Avatar billede bhn.314 Nybegynder
11. november 2003 - 14:57 #2
Nej, det troede jeg også, men så mangler status_id. Tages den med i select'en så fås et forkert resultat hvis der er andre status_id'er end 32 og 75. Eksempelvis fås:

===================================
person_id | status_id | status_time
===================================
1        | 75        | 2003-01-10
2        | 32        | 2003-01-21
2        | 68        | 2003-01-21

Hvis 68 er et status_id
Avatar billede bhn.314 Nybegynder
11. november 2003 - 14:59 #3
select status_id, person_id, max(status_time)
from tblAB
group by status_id, person_id

FUNGERER IKKE....
Avatar billede bhn.314 Nybegynder
11. november 2003 - 15:00 #4
RETTELSE:

===================================
person_id | status_id | status_time
===================================
1        | 75        | 2003-01-10
2        | 32        | 2003-01-21
2        | 68        | 2003-01-20  !!!!!!!!!!!!!
Avatar billede psv Nybegynder
11. november 2003 - 15:17 #5
Oki... Du vil ha' hele rækken.... prøv:

select a.*
from tblAB a, (select person_id, max(status_time) ms
              from tblAB
              group by person_id) b
where a.person_id = b.person_id
  and a.status_time = ms
Avatar billede bhn.314 Nybegynder
11. november 2003 - 15:41 #6
Du har lige reddet min dag - det var guld værd for mig. Værs'go 30 point.

Tak for hjælpen
Avatar billede psv Nybegynder
11. november 2003 - 15:44 #7
Velbekomme og selv tak :-)
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