Kom ihåg mig?
Home Menu

Menu


Problem med Having i Mysql

Ämnesverktyg Visningsalternativ
Oläst 2004-03-29, 21:19 #1
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
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:

EMU Euro EUR 9.25 0.03
USA Dollar USD 7.39 -0.04
Dansk Krone DKK 1.20 0.02
...
Valutakurserna skall alltså ställas upp enligt, name, prfx, value och förändring sedan senaste mätning.

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
tack
Andreas
Andreas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-03-30, 01:44 #2
Per Per är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2003
Inlägg: 719
Per Per är inte uppkopplad
Supermoderator
 
Reg.datum: Apr 2003
Inlägg: 719
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)
Per är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-03-31, 03:22 #3
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
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
Andreas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-04-02, 17:01 #4
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
Fungerar nu, var jag som hade ett fel i databasen, tack för sql-satsen.

Andreas
Andreas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-06-29, 22:03 #5
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
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
Andreas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-06-30, 00:22 #6
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
Citat:
Originally posted by Andreas@Jun 29 2004, 21:03
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
Tar slut på resurser? Hur många rader har du i tabellen?
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-06-30, 10:02 #7
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
name_tbl: 295 rader
ecb_tbl: 1575 rader

Andreas
Andreas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-01, 00:45 #8
Roberts avatar
Robert Robert är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Jan 2004
Inlägg: 2 103
Robert Robert är inte uppkopplad
Klarade millennium-buggen
Roberts avatar
 
Reg.datum: Jan 2004
Inlägg: 2 103
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?
Robert är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-01, 09:09 #9
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Anders Anders är inte uppkopplad
Supermoderator
 
Reg.datum: Oct 2003
Inlägg: 833
Citat:
Ursprungligen postat av Andreas
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
Det är pga HAVING som din fråga tar mycket resurser. MySQL optimerar inte HAVING på något sätt, därför bör du undvika dem.

<!--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]
Anders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-07-09, 10:52 #10
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
Andreas Andreas är inte uppkopplad
Medlem
 
Reg.datum: Nov 2003
Inlägg: 185
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
Andreas är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 15:42.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017