The_HulkMedlem sedan juni 20031 837 inlägg Hej!
Får inte ihop min SQL-sats.
Tabell
Event
Fält
event_id int
event_type_id int
event_time int
event_text varchar(50)
data
1 | 1 | 1 | 'test'
2 | 1 | 5 | 'hello'
3 | 2 | 10 | 'hepp'
4 | 3 | 15 | 'bong'
5 | 2 | 25 | 'tjoff'
6 | 4 | 28 | 'blaff'
7 | 5 | 30 | 'zapp'
8 | 1 | 40 | 'zoom'
9 | 5 | 53 | 'pong'
10 | 3 | 65 | 'end'
Jag få en lista med den senaste händelsen från varje event_type_id, sorterad efter event_type_id
8 | 1 | 40 | 'zoom'
5 | 2 | 25 | 'tjoff'
10 | 3 | 65 | 'end'
6 | 4 | 28 | 'blaff'
9 | 5 | 53 | 'pong'
Har försökt på olika sätt men inte fått ihop det.
Någon som kan hjälpa mig?
Tycker inte detta ska vara så svårt men jag fick inte ihop det oavsett vad jag testade.
/red
Bör kanske säga att det är MySQL 4.0.21 jag kör. så subselect fungerar inte vad jag vet.
LarsGMedlem sedan dec. 200012 464 inlägg select e1.event_type_id,
e1.event_time,
e1.event_text
from event e1 join event e2
on e1.event_type_id = e2.event_type_id
group by e1.event_type_id,
e1.event_time,
e1.event_text
having e1.event_time = max(e2.event_time)
The_HulkMedlem sedan juni 20031 837 inlägg Det verkar fungera men var inte så snabbt.
testade jag på en tabell med 10 poster kunde man inte märka någon tid, men när det fanns 15 000 poster tog det MYCKET längre tid, runt 80 sekunder.
har index på tabellen, tror dock alla fält ligger i samma index.
tips på hur man kan optimera index?
LarsGMedlem sedan dec. 200012 464 inlägg Borde inte event_type_id och event_time vara primärnyckel? I så fall kan du ta bort kolumnen event_id.
The_HulkMedlem sedan juni 20031 837 inlägg kan man sätta flera fält som primär i mysql?
The_HulkMedlem sedan juni 20031 837 inlägg skulle du även kunan förklara vad "having" innebär?
har aldrig sett det tidigare.
The_HulkMedlem sedan juni 20031 837 inlägg Varför måste man lösa det på det sättet?
varför fungerar det inte så här:
select e1.event_type_id,
e1.event_time,
e1.event_text
from event e1
group by e1.event_type_id
order by e1.event_time desc
The_HulkMedlem sedan juni 20031 837 inlägg Löste det just nu genom att först plocka ut alla maxtider för de olika typerna och sedan köra en SQL-sats per typ. Det andra sättet tog bara längre och längre tid ju fler poster det fanns i databasen.