Att ta fram det bästa resultatet i en fråga i ACCESS är ju enkelt. Det är ju bara att välja function och MAX. Men hur gör man för att få tag på det NÄST BÄSTA RESULTATET. select max(resultat) from ogrish where resultat < (select max(resultat) from ogrish) Vill du ha de två bästa så kan du använda SELECT TOP 2 * FROM .... Det är som så att det är en väldigt komplex SQL, så jag tänkte låta ACCESS få kompilera den själv. Den bör kunna se ut så här, men jag får ett fel på den. Som Emma säger använd top istället för oom för guds skull!!! Tack för din omtanke, men du missupfatar mig. Låt mig fråga dig vad du vill åstakomma, skall du använda fråga till ett formulär, raport eller vid export? Hur din databas ser ut? Vilka värden kall PlaceringSv ha? Vilka tabeller är inblandande hur ser relationerna ut mellan tabellerna om det är flera? Eftersom jag nu sitter på jobbet så kan jag nog inte ge dig exact alla uppgifter. Använd top2-satsen hämta den dit du ska presentera resultatet. Kolla Var det inte svårar än så? Lägg bara till ett vilkor att den inte skall inkludera 0 värden. Tack för förslaget. Efter ett antal enformiga dagar, med enbart inmatning av gammal data, så har jag fixat till det.Det näst bästa resultatet.(LÖST)
Tacksam för svar.
BenniSv: Det näst bästa resultatet.
Sv: Det näst bästa resultatet.
/EmmaSv: Det näst bästa resultatet.
Vad jag behöver är detta:
BästSv1: Min(OOM([PlaceringSv]>0;[PlaceringSv];0))
Det här skrivs in i fälten på frågan, så fixar ju ACCESS resten.
Frågan är, hur skall jag taänka??
Den första delen skall vara kvar:
BästSv1: Min(OOM([PlaceringSv]>0;[PlaceringSv];
Sen måste det komma en ny oomfunktion så att jag kan få det näst bästa resultatet.
Förstår ni???Sv: Det näst bästa resultatet.
BästSv1: Min(OOM([PlaceringSv]>0;[PlaceringSv];(OOM(select min([PlaceringSv]) from t_datum where [PlaceringSv] < (select min([PlaceringSv]) from t_datum;0)))))
Felet jag får säger att omfunctionens agrument måste omges av paranteser, men jag tycker att jag har fått tillräckligt många.
Någon???Sv: Det näst bästa resultatet.
strSQL = "SELECT TOP 2 [t_datum].* FROM [t_datum] ORDER BY [t_datum].[PlaceringSv]"Sv: Det näst bästa resultatet.
Efter som det totalt är en väääääääääldigt lång SQL-sträng, så är det bäst att låta ACCESS få göra SQL-strängen. För att göra detta så behöver jag fixa till den oom-functionen.Sv: Det näst bästa resultatet.
ÄR det så att du vill inkludera det näst högsta resultatet som en kolumn i en anna stor sql fråga? Så jag uppfatade dig.
Tänk på att OOM (en IIF) funktionen är en vbfunktion. Vilket kommer kräva alla parametrar till anropet från databas motorn. Att dessutom använda flera underfråger för detta är ungefär som att försöka få frågan att ta så lång tid som möjligt.Sv: Det näst bästa resultatet.
Bakgrund.
Jag följer placering av sångtitlar, placerade i lista i Sverige, Europa och övriga Världen.
Tabeller av intresse är t_songtitlar(där songtitel bl a ligger lagrad) och t_datum(där datum, bästSv,bästEu,bästVärlden ligger lagrade(som tal)).
Att få tag på bäst, sämst medel är inga problem, så länge som värdet är över 0 dvs 1 eller stärre.
Problemet blir när t ex 'Despite All' har följande värde (oavset datum)
Datum bästSv bästEu bästVärlden
2001-12-01 0 0 0
2001-12-02 152 482 0
2001-12-03 69 328 0
2001-12-04 4 129 458
Detta är ju enbart för att illustrera var problemen ligger. Tar man då min(som då blir det bästa resultatet) så tar datorn fram 0, 0 är ju ett bättre tal än 1(datorn börja ju att räkna vid 0)
I detta fallet så säger datorn:
min(bästSv) = 0
max(bästSv)=152
Förstår ni problemen nu? Sv: Det näst bästa resultatet.
om den första positionens resultat > 0 om ja -> använd den, annars
använd tvåan... Kan du få mer än en nolla tillbaka (vilket du undiker
genom att använda distinct) hämta så många poster du tror dig behöva
och hoppa bara över dem där resultat är = 0.
/EmmaSv: Det näst bästa resultatet.
Föreslår oxå att du ändrar data strukturen till:
Datum Lista Placering
2001-12-01 Sv 0
2001-12-01 Eu 0
2001-12-01 Världen 0
2001-12-02 Sv 152
2001-12-02 Eu 482
2001-12-02 Världen 0
2001-12-03 Sv 69
2001-12-03 Eu 328
2001-12-03 Världen 0
2001-12-04 Sv 4
2001-12-04 Eu 129
2001-12-04 Världen 458
Fördelen är att datastrukturen då är "dynamisk" *Du kan lägga till ändra och ta bort lister utan att behöva uppdatera, lägga till eller ta bort kolumner.
För att lista resultatet skulle frågan se ut:
SELECT Datum, Lista, Min(Placering) As Lägsta, Avg(Placering) As Medel, Max(Placering) As Högsta
FROM TabellNamn
WHERE Placering > 0
GROUP BY Datum, ListaSv: Det näst bästa resultatet.
Nja enkelt, teoretiskt kanske men databasen innehöll över 500 poster. Nu hade inte alla titlar något värde i bästVärlden, men det blir ändå att mata in ca: 1200-1300 poster.
Redan nu så märker jag ju att du har alldeles rätt, så jag tror nog att jag slipper dessa problem i fortsättning.
Dock, eftersom jag nu är tvungen att helt bygga om min VB-applikation, så lär jag komma tillbaka med mera frågor.
Tack för all hjälpSv: Det näst bästa resultatet.
Den fungerar till och med bättre än vad jag har kunnat drömma om.
Just nu så ser jag inga problem, men tack för all hjälp.