Jag har en databas som innehåller tabeller med valutavärden, dag för dag. Dock hämtas ej data på helgdagar och vissa andra dagar.
Tabell euro_tbl
id
name (Ex USD, EUR, SEK)
value -double (Ex. 2.72)
date (Ex. 2004-01-22)
Tabell name_tbl
id
name (Svensk Krona)
prfx (SEK)
Nu skulle jag vilja göra en sqlsats som listar de senaste värdena
jämför med de från mätningen innan (observera att senaste mätning innan kan vara 1,2,3,4 dagar tillbaka). Den skall också hämta "name" från name_tbl genom att jämföra "prfx" mot "name"
Alltså listningen skall bli något istil med:
EMU Euro EUR 9.25 0.03
USA Dollar USD 7.39 -0.04
Dansk Krone DKK 1.20 0.02
...
select n.name, n.prfx, e1.value, e1.value - e2.value
from name_tbl n
join ecb_tbl e1
on n.prfx = e1.name
join ecb_tbl e2
on e1.name = e2.name
group by n.name, n.prfx, e1.value, e1.vdat, e2.vdat
having max(e2.vdat) = e1.vdat
Klarar din version av MySQL av någon anledning inte av en HAVING-klausul med tabellalias?
Fick sql-satsen att fungera i några månader, sedan blev jag kontaktad av webbhotellet som menade att denna uträkning tog för mycket resurser.
Fick ett svar någonstans att det var Having-delen som drog ner databasen i träsket.
Tänkte då att det skull räcka ifall man bara kontrollerade value på 'vdat' och 'vdat-1', finns ej 'vdat-1' så skrivs inget ut.
Någon som har en tanke, idé på hur man skulle ställa upp denna sql-sats, med mål att göra den så prestandaeffektiv som möjligt.
select
n.name,
n.prfx,
e1.value,
e1.value - e3.value,
e1.vdat,
e3.vdat
from
name_tbl n
join ecb_tbl e1 on n.prfx = e1.name
join ecb_tbl e2 on e1.name = e2.name
join ecb_tbl e3 on e2.name = e3.name and e3.vdat < e2.vdat
join ecb_tbl e4 on e3.name = e4.name and e4.vdat < e2.vdat
group by
n.name,
n.prfx,
e1.value,
e1.vdat,
e3.value,
e3.vdat
having
max(e2.vdat) = e1.vdat and
max(e4.vdat) = e3.vdat
Man skulle kunna lösa det på själva presentationsdelen, dvs i mitt fall i en Javaböna, att man plockar data från två separata sqlsatser typ, select top 1 * from ecb_tbl order by...' resp select top 2 ' from ecb_tbl order by...' men detta känns inte som en snygg lösning. Skulle gärna vilja lösa det med en sql-fråga.
Andreas
258 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91