![]() |
Problem med SQL-fråga
Hej på er,
Sitter fast i SQL-träsket med en fråga jag inte får till... Nedan har jag två (fejkade) tabeller, en för användare och en för adresser. En användare kan ha flera adresser där ett datum bestämmer vilken adress som är den senaste (aktuella). Hur gör jag för att selektera ut samtliga users och joina in endast den senaste adressen för varje user? Det som ställer till det för mig är att jag vill kunna selekta ut alla kolumner från adress-tabellen (svårt att göra en group by med andra ord) Kod:
Users: |
Pröva med att ha en sammansatt index med autoincrement som bygger på båda kolumnerna AdressId och UserId i adress-tabellen
Då kommer tabellen att se ut så här: Adress: ======================== Kod:
AdressId UserId Kombo_Autoincrement Street Date |
Hmmm, jag har tyvär bara möjlighet att skriva frågor, inte ändra i databasstrukturen. Det var väl det ditt förslag gick ut på?
|
Kod:
select |
Citat:
|
Citat:
Varför man inte skulle använda en join med group by här har jag svårt att förstå. |
Uppdaterat 2010-11-12:
Med 1 miljon rader i båda tabellerna tog frågan ca 6 sekunder (~19 allt som allt, inkl. att returnera alla rader) att köra på min 5 år gamla burk. Körde sedan frågan genom query tuning analysern och det visade sig att jag inte hade bra index. Med ett nytt index som innehåller både UserId och Date körs frågan omedelbums. Det som tar tid är att returnera raderna (~14 sek). Hur som helst: Sql är inte mitt starkaste område så andra lösningar är fortfarande intressanta. Hur skulle du skriva frågan? |
När man använder group by är det svårt att styra vilken rad i gruppen som väljs ut. Enligt mina erfarenheter är det den första raden, och man skulle kunna styra det genom att sortera tabellen i förväg. Men det är odokumenterat och jag skulle inte lite på det. Subquery är nog vägen att gå här, om man inte kan göra tabellen på ett bättre sätt.
|
Citat:
|
Citat:
Om ni verkligen inte har möjlighet att ändra databasen på något vis så skulle en extrem alternativ lösning vara att spara varje användare med nuvarande adress i en fil. |
Alla tider är GMT +2. Klockan är nu 19:26. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson