webForumDet fria alternativet

gruppering och sortering av händelser

Databaser & SQLur Databashanterare & SQL

8 svar · 345 visningar · startad av The_Hulk

The_HulkMedlem sedan juni 20031 837 inlägg
#1

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
#2
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
#3

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
#4

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
#5

kan man sätta flera fält som primär i mysql?

LarsGMedlem sedan dec. 200012 464 inlägg
#6

but of course.

The_HulkMedlem sedan juni 20031 837 inlägg
#7

skulle du även kunan förklara vad "having" innebär?
har aldrig sett det tidigare.

The_HulkMedlem sedan juni 20031 837 inlägg
#8

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
#9

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.

136 ms totalt · 3 externa anrop · v20260731065814-full.94fcd635
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)