anoniem Geplaatst: 20 oktober 2004 Delen Geplaatst: 20 oktober 2004 Hallo, Ik heb de volgende query (voor MySQL 4.1): [code:1:a4ce4b1af7] SELECT G.Title, H.Name FROM ( (SELECT AVG(F.Pos-E.Pos) as AverageRaise, E.SongID FROM top2000 E, top2000 F WHERE E.Year=F.Year+1 AND E.SongID=F.SongID AND E.SongID IN ( SELECT DISTINCT A.SongID FROM top2000 A, top2000 B WHERE A.SongID=B.SongID AND A.Pos<B.Pos AND A.Year=B.Year+1 AND NOT EXISTS ( SELECT * FROM top2000 C, top2000 D WHERE C.SongID=A.SongID AND C.SongID=D.SongID AND D.Pos>=C.Pos AND D.Year>C.YEAR) AND NOT EXISTS ( SELECT * FROM top2000 C WHERE C.SongID=A.SongID AND NOT EXISTS ( SELECT * FROM top2000 D WHERE A.SongID=C.SongID AND C.SongID=D.SongID AND ABS(C.Year-D.Year)=1 ) ) ) GROUP BY E.SongID #ORDER BY E.SongID ) AS ResultA, song G, artist H) WHERE ResultA.AverageRaise=(SELECT MAX(AverageRaise) FROM ResultA) AND # ResultA.AverageRaise=MAX(ResultA.AverageRaise) AND G.SongID=ResultA.SongID AND H.ArtistID=G.ArtistID GROUP BY G.Title, H.Name; [/code:1:a4ce4b1af7] Deze query werkt gedeetelijk het bovenstuk werkt goed, ga er maar vanuit dat daar een tabel ResultA uitkomt met de velden 'AverageRaise' en 'SongID'. Nu wil ik daaruit de SongID met de grootste AverageRaise dat probeer ik in het laatste stuk te doen, maar ik krijg de melding: [code:1:a4ce4b1af7] ERROR 1146 (42S02): Table '2id30.resulta' doesn't exist [/code:1:a4ce4b1af7] Ik denk dat in de subquery "SELECT MAX(Aver...).." deze naam niet bestaat. Maar eigenlijk wil ik niet de hele query hier weer opnieuwe neerzetten. Een temporary table lost dit ook niet vanwege problemen met temporary tables in 4.1 Iemand een idee? Groet, Marcel Quote Link naar reactie
anoniem Geplaatst: 21 oktober 2004 Auteur Delen Geplaatst: 21 oktober 2004 1. Post je table schema a.u.b. 2. Wat doe je ongelooflijk moeilijk. Ik kan me niet voorstellen dat dit snel is, of is dat geen probleem? 3. De SQL kennis is hier vast niet hoog genoeg om dit probleem op te lossen ;) Quote Link naar reactie
anoniem Geplaatst: 21 oktober 2004 Auteur Delen Geplaatst: 21 oktober 2004 [quote:cb0379c411="Jaaap"] 3. De SQL kennis is hier vast niet hoog genoeg om dit probleem op te lossen ;)[/quote:cb0379c411] Aanwezige SQL kennis zal niet het grootste probleem zijn. Kennis van dit specifieke vraagstuk is denk ik belangrijker. En die kennis moet door de TS aangeleverd te worden. Om eerlijk te zijn heb ik niet veel zin om zo'n draak van een query helemaal uit te pluizen :D :wink: Ik kan me ook niet aan de indruk onttrekken dat dit makkelijker moet kunnen. Het lijkt een beetje alsof geforceerd alles via 1 enkele query moet worden uitgevoerd. Terwijl dat niet altijd de beste oplossing is. Quote Link naar reactie
anoniem Geplaatst: 23 oktober 2004 Auteur Delen Geplaatst: 23 oktober 2004 Hallo, Beetje late reactie maar ben 2 dagen weggeweest, ook wel eens lekker...:). Ja ik had inderdaad het schema moeten posten komt ie: tables: song, artist, top2000 columns: song(SongID, Title, PublicationYear, ArtistID) artist(ArtistID, Name) top2000(ID,SongID,Pos,Year) Waarbij: Pos = Positie in top2000 van liedje 'SongID' en in jaar 'Year' dus bv: x,1,1,2000 geeft aan dat in 2000 het liedje met SongID 1 op nummer 1 staat (toevallig Bohemian Rhapsody...:) ). De query is wel redelijk snel nog gem. <3s. Wat de query probeert te doen: 1. Het selecteren van alle liedjes die gestegen zijn in opeenvolgende jaren (en ALLEEN in opeenvolgende jaren, liedjes die weg zijn geweest doen dus niet mee). Dus een liedje dat van 1999 tot en met 2000 in de top2000 staat en daarin gestegen is wordt geselecteerd, ook die van 2000 tot 2003 alleen gestegen is, maar 1 die bv in 1999 erin stond en toen van 2001 tot 2002 doet niet mee. (Note: gestegen is dus een lagere positie) 2. Van deze liedjes degene selecteren die gemiddeld het hardst gestegen is. Ik hoop dat dit duidelijker is. Groet en alvast bedankt, Marcel van Leeuwen Quote Link naar reactie
anoniem Geplaatst: 24 oktober 2004 Auteur Delen Geplaatst: 24 oktober 2004 [quote:87386130ac="Jaaap"]...[/quote:87386130ac] @Jaaap: Ik vroeg het ook al via PM, maar daar reageer je niet op. Maar zou je je avater even willen veranderen, dit is nogal verwarrend. Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen