FAQ |
Kalender |
2004-03-29, 21:19 | #1 | ||
|
|||
Medlem
|
Har ett problem med en sql-sats, eller om det är min mysql-databas.
Databasen finns att hämta på http://www.digital-network.nu/finance.sql Meningen är att jag vill ställa upp databasen, enligt följande princip: Citat:
Fick då rekommendationen att följande sql-sats skulle lösa detta. Men så verksr ej vara fallet, får felet, "Unknown column 'e1.vdat' in 'having clause" Kod:
select n.name, n.prfx, e1.value, e1.value - e3.value 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 Andreas |
||
Svara med citat |
2004-03-30, 01:44 | #2 | ||
|
|||
Supermoderator
|
Du måste select'a det du ska ha göra 'having by' med. Följande fungerar, men det finns förstås en del kriterier; exempelvis att det måste finnas minst två poster med olika datum men det är ju inget problem i live-miljön får man anta.
Kod:
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
__________________
www.ip2nation.com (ip till land) |
||
Svara med citat |
2004-03-31, 03:22 | #3 | ||
|
|||
Medlem
|
Tack, det fungerade så som jag ville ha det. Perfekta värden.
Dock är detta kanske en "dum" fråga, men varför listas inte alla resultaten när jag kör denna fråga, miss visar endast Norska krone? tack Andreas |
||
Svara med citat |
2004-04-02, 17:01 | #4 | ||
|
|||
Medlem
|
Fungerar nu, var jag som hade ett fel i databasen, tack för sql-satsen.
Andreas |
||
Svara med citat |
2004-06-29, 22:03 | #5 | ||
|
|||
Medlem
|
Har fått nya problem, denna uträkning verkar kräva fruktansvärt mycket data att uträkna. Fick mail ifrån ett webbhotell jag använder att uträkningen tar slut på resurser.
Vänligen vad skall jag göra? Andreas |
||
Svara med citat |
2004-06-30, 00:22 | #6 | |||
|
||||
Klarade millennium-buggen
|
Citat:
|
|||
Svara med citat |
2004-06-30, 10:02 | #7 | ||
|
|||
Medlem
|
name_tbl: 295 rader
ecb_tbl: 1575 rader Andreas |
||
Svara med citat |
2004-07-01, 00:45 | #8 | |||
|
||||
Klarade millennium-buggen
|
Om vi lämnar sql frågan och istället funderar på om det går att köra en sql sats (jobb) per dag som gör precis det du vill men lägger resultatet i en anna tabell för senare visning, eller är datat verkligen realtime alternativt dynamiskt?
|
|||
Svara med citat |
2004-07-01, 09:09 | #9 | ||
|
|||
Supermoderator
|
Citat:
<!--QuoteBegin--MySQL Manual[/i]@ Jul 1 2004, 08:09 The HAVING clause can refer to any column or alias named in a select_expr. It is applied nearly last, just before items are sent to the client, with no optimization. (LIMIT is applied after HAVING.)[/quote] |
||
Svara med citat |
2004-07-09, 10:52 | #10 | ||
|
|||
Medlem
|
Verkar som jag får effektivisera hela databasen.
Tänkte om man kunde skriva en smidigare sats som skriver ut på följande sätt. Plockar ut de senaste värdena (dvs högst 'vdat') och jämför med 'vdat- 1' finns ingen data på 'vdat - 1' skriver den inte ut något. Dvs man minskar frågan ganska rejält. Är detta en lösning, och isf hur skulle en effektiv sql-sats se ut? Andreas |
||
Svara med citat |
Svara |
|
|