webForumDet fria alternativet

Sökning med gruppering

4 svar · 401 visningar · startad av Obbelix

ObbelixMedlem sedan okt. 2002257 inlägg
#1

Har följande tabeller:

[B][players][/B]
id     team_id     name     born
3      5           Peter    1980-07-07
4      6           Peter    1980-07-07
5      7           Peter    1980-07-07

[B][teams][/B]
id    tour_id    name
5     2          SIK
6     3          SIK3
7     4          SIK2

[B][tournaments][/B]
id   name    start_date
2    Test1   2008-10-11
3    Test2   2008-10-20
4    Test3   2008-11-12

Önskat resultat vid sökning på "Peter"

Id   Name    Team   Born         Count
5    Peter   SIK2   1980-07-07   3

Vill alltså leta reda på alla som heter "Peter", gruppera dessa på födelsedag (born) samt hämta ut name från tabellen team där team ingår i den turnering (tournament) som har nyast start_date.

Har försökt lite men inte lyckats helt:

SELECT 
	max(p.id) as id, 
	p.name, 
	p.born, 
	max(t.name) as team, 
	count(p.id) as count
FROM players p 
INNER JOIN teams t ON t.id=p.team_id
INNER JOIN tournaments tt ON tt.id=t.tour_id
WHERE p.name LIKE '%peter%'
GROUP BY p.name, p.born
ORDER BY p.name

Edit: MSSQL 2005

Peter SMedlem sedan dec. 20025 483 inlägg
#2
create view myview
as
select
	p.id as playerid,
	p.born as playerborn,
	p.name as playername,
	t.name as teamname,
	s.start_date as tournamentstart,
	( select MAX(start_date) from tournaments s2
	    inner join teams t2 on s2.id = t2.tour_id
	    inner join players p2 on t2.id = p2.team_id
	    where p2.name = p.name ) as maxdate
from
	players p inner join teams t
	on
	p.team_id = t.id
		inner join tournaments s
		on
		t.tour_id = s.id
select
    ( select max(playerid) from myview where playername = v.playername ),
    v.playerborn,
    v.playername,
    ( select max(maxdate) from myview where playername = v.playername ),
    ( select teamname from myview where playername = v.playername and maxdate = tournamentstart ),
    COUNT(*)
from
    myview v
where
    v.playername like '%peter%'
group by
    v.playerborn,
    v.playername
ObbelixMedlem sedan okt. 2002257 inlägg
#3

mja... En bit på väg i alla fall.
Om det finns en som heter "Peter O" och en som heter "Peter P" och man söker på "Peter" ska det bli två resultat, med nuvarande fråga blir det endast ett.

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Inlägget ovan redigerat :)

ObbelixMedlem sedan okt. 2002257 inlägg
#5

Tackar!

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