webForumDet fria alternativet

Näst högsta värdet i en SELECT

Databaser & SQLur Databashanterare & SQL

5 svar · 381 visningar · startad av Uwe

Medlem sedan nov. 2003181 inlägg
Frågan#1

Har en SELECT-sats som ser ut ungefär så här:

SELECT * FROM tabell1, tabell2 WHERE tabell1.id=tabell2.id AND tabell1.datum < "Näst senaste datumet i tabell2"

Problemet är att jag inte vet hur jag ska kunna ange det näst senaste datumet. Det hade kunnat lösas med en subquery, men eftersom min databas inte klarar av det behöver jag göra detta utan den hjälpen. Någon som vet hur en lösning kan se ut?

/Uwe

Medlem sedan dec. 200012 464 inlägg
#2
SELECT t1.c1,t2.c2
 FROM t1 join t2
  on  t1.id = t2.id 
  join t2 t3 on t2.id = t3.id
  join t2 t4 on t3.datum < t4.datum
where t1.datum < t3.datum
  group by t1.c1,t2.c2,t2.datum
  having t2.datum = max(t3.datum)
Medlem sedan nov. 2003181 inlägg
#3

Har försökt med din kod LarsG men får det inte att funka. Den fungerar säkert klockrent, men jag var nog för otydlig i min fråga. Jag tänkte förenkla lite för att det skulle vara lättare att förstå min formulering, men det var kanske ingen god idé :OO .

Egentligen har jag fler än två tabeller som ska joinas. Totalt är det fem tabeller och datumen som ska jämföras ligger i yttertabellerna, med tre tabeller emellan sig. Går det att applicera din kod även om fallet är som sådant?

/Uwe

Medlem sedan apr. 2004778 inlägg
#4

Du skulle behöva köra en UNION på alla tabeller, använd TOP 2 och sedan sortera på datum ASC.

Eller så tänker jag på nåt annat.

Medlem sedan dec. 200012 464 inlägg
#5

Det blir nog enklast att använda temptabeller och mellanlagra resultat (eller använda en bättre DBMS).

Medlem sedan nov. 2003181 inlägg
#6

Tack LarsG för förslaget med temp-tabeller!

Jag gick på din linje med att skapa temp-tabeller, vilket gjorde problemet mycket enklare. :D

/Uwe

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