Toon posts:

[MySql]Geen Sub-Selects :-(

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb al in de "help" van MySql gekeken en idd, Sub-Selects doen het niet...

Nu heb ik een query waarvan ik al weet dat ie goed is (getest met Sybase SQL).

Eerst even kort de bedoeling:

Hier hoe de create was:

CREATE TABLE koersen
(
update_time DATETIME NOT NULL,
fonds_name CHAR(255) NOT NULL,
last SMALLINT,
PRIMARY KEY (update_time,fonds_name)
)

De bedoeling is dat ik van elk fonds het last updated record krijg.

De query die dus wel in Sybase werkt:

SELECT * FROM koersen k WHERE update_time = (SELECT MAX (update_time) FROM koersen WHERE fonds_name = k.fonds_name)

Heeft er iemand enig id hoe ik dit in MySql aan de praat krijg?

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

erg standaard probleem: Max naar de eerste select over gooien.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Er zijn allerlei ranzige manieren om dit in mysql te doen, een ervan is te sorteren op de update_time en dan dmv limit 1 de 'max' eruit te pakken.

Verwijderd

Topicstarter
Dusty, zou je dat uit willen leggen, moet ik dan de MAX(update_time) doen in de eerste SELECT?

Anders gebruik ik de tip van ACM wel, maar als het met MAX kan zou mooier zijn.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

select id, name, max(tijdje) from blaat group by kolommen

En sta versteld :)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Topicstarter
LOL, wist niet dat het zo makkelijk kon, bedankt dusty!

Voor de mensen die ooit nog eens dit topic lezen: in mijn geval is de uiteindelijke query:

SELECT fonds_name, last, MAX(update_time) FROM koersen GROUP BY fonds_name

Deze kan dus dicht, moet ik dat nog ergens aangeven trouwens? Of komt een mod em vanzelf tegen?

Thnx!

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Mooie reference voor de mensen, hebben ze ooit hier nog vragen over kunnen ze hier reageren (anders moeten ze weer een nieuwe thread maken) dus laten we deze voorlopig lekker open :)

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Is er trouwens een tooltje beschikbaar die deze sub-queries elimineert voor je en de query dus herschrijft naar iets wat MySQL wel aankan?

Zo niet, dan moet dat maar eens gemaakt worden :7 .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Op dinsdag 04 juni 2002 19:38 schreef mbravenboer het volgende:
Is er trouwens een tooltje beschikbaar die deze sub-queries elimineert voor je en de query dus herschrijft naar iets wat MySQL wel aankan?

Zo niet, dan moet dat maar eens gemaakt worden :7 .
ik hou je niet tegen ;)

Doet iets met Cloud (MS/IBM)


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

Op dinsdag 04 juni 2002 19:38 schreef mbravenboer het volgende:
Is er trouwens een tooltje beschikbaar die deze sub-queries elimineert voor je en de query dus herschrijft naar iets wat MySQL wel aankan?

Zo niet, dan moet dat maar eens gemaakt worden :7 .
Zover ik weet bestaat dat inderdaad niet, de enige tool die ik heb gevonden die het wel kon was het apparaatje in mijn hoofd.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
Nou zo moeilijk zal het niet zijn. Maar zijn ze @ mysql niet bezig met Sub-selects? Ik las in ieder geval dat ze nog geen sub-selects ondersteunden, en volgens mij was 'nog' daar ook benadrukt. Correct me if i'm wrong.

  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

90% kan nog niet eens een normale query goed in elkaar gooien, laat staan dat ze met sub-selects gaan werken :+

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Toevallig ben ik op dit moment bezig met een query-herschrijver en het leek me wel leuk om een wat praktische toepassing te maken. Dit dus :P . Eigenlijk is dit een standaard herstructuring in een query-compiler
(maf overigens dat MySQL dat niet aan kan, zeker als ze zelf al aangeven hoe je het kunt herschrijven, alhoewel complexe gevallen een stuk lastiger zijn).

Als het gaat werken, zal hij echter niet al die MySQL queries accepteren, maar alleen standaard werk >:) . Verder zijn de SQL tabel definities noodzakelijk.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Aangezien de mensen met behoorlijk wat MySql kennis in dit topic al hebben gereageerd, nog een SQL vraag.

Als dit echt niet mag omdat het offtopic is, dan maak ik wel een nieuwe thread, maar lijkt me zonde.

De vraag gaat over dezelfde table die bovenaan dit topic is gegeven.

Ik wil graag data invoegen (INSERT INTO), maar er mag alleen een nieuwe record worden aangemaakt als er niet al 1 bestaat met dezelfde koers van een eerdere datum.

Dus stel er is een record met inhoud:
26-02-83 16:30:00, KPNQWest, 5

dan mag een nieuwe record alleen worden toegevoegd als deze een datum/tijd heeft die later is dan de laatste tijd (van dit fonds) in de tabel EN de koers mag niet hetzelfde zijn.

Als mogelijke oplossing heb ik bedacht om eerst uit de tabel de hoogste tijd/datum van een bep. fonds te halen en de koers (last). Als deze datum eerder is dan de gegeven datum EN de koers is niet gelijk aan de gegeven koers, dan een 2e query uitvoeren met een simpele insert.

Het liefst zou ik dit in 1 query doen, weet iemand of dat mogelijk is?

P.S. dit is geen schoolopdracht :)

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 07:26
Al gezocht in de mysql manual naar REPLACE :?

Verwijderd

Topicstarter
Ik heb idd naar REPLACE gekeken, maar die doet hetzelfde als SELECT behalve dat deze een al bestaand record vervangt als de primary keys overeen komen. Bij mij zijn is de PRIMARY een combinatie van update_time en fonds_name. Dit is omdat er op 1 tijd meerder fondsen kunnen staan, en ook 1 fonds vaker voorkomt met een andere datum.

Replace kan ik hier toch niet gebruiken? Want juist de tijd is anders en die behoord tot de PRIMARY KEY.

Please correct me if I'm wrong ;)

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 03-09 15:18

Crazy D

I think we should take a look.

Ok wel wat offtopic hoor maar ik vraag het me toch af :P

Waarom wil je alleen een record toevoegen als deze een nieuwe koers heeft? Als je er dan later een mooi grafiekje of zo van maakt, klopt de grafiek toch niet?
Ik bedoel:
code:
1
2
3
26-02-83 08:30:00, KPNQWest, 5
26-02-83 12:30:00, KPNQWest, 5
26-02-83 16:30:00, KPNQWest, 1

Als je alleen een record toevoegt als de datum nieuwer is en de koers anders, komt de middelste niet in de tabel. Als je dan een grafiekje maakt kom je om 12.00 met een koers van 3, terwijl dit niet de koers is van dat tijdstip...

Exact expert nodig?


Verwijderd

Topicstarter
Het is net iets anders. Zolang de koers gelijk blijft staat ie op de oude datum, zodra de koers veranderd voeg ik een nieuw record toe. Dus om even met jouw voorbeeld verder te gaan; het middelste record wordt idd niet toegevoegd, maar het laatste wel. De grafiek maak ik dus niet van 5 naar 1 met een kromme, maar de grafiek blijft op 5 staan tot de laatste meet datum, dan dropt ie dus meteen naar 1.

hmm :? hoop dat dit duidelijk overkomt
Pagina: 1