[SQL] Max waarde

Pagina: 1
Acties:

  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Ha die mannen.
Ik zit met een klein probleempje in SQL.

Ik wil de 'datum' selecteren van de max 'topic_id' waarvan het forum_id 1 is.
Dat doe je heel simpel met een max(topic_id) of iets dergelijks maar dat gaat niet.

Hier een gestripte versie van mijn tabelletjes met verzonnen inhoud.

tblposts
Post_IDTopic_IDDate
1120-2-2004
2121-2-2004


tbltopics
Topic_IDForum_ID
11
21
32


Dit is mijn query zo ik hem nu heb.
code:
1
2
3
SELECT TOP 1 tblPosts.Date FROM tblTopics, tblPosts 
WHERE tblTopics.Topic_ID = tblPosts.Topic_ID AND tblTopics.Forum_ID =1
ORDER BY tblPosts.Post_ID DESC

Maar dit lijkt me nu niet echt de ultieme manier.
Ik dacht dan probeer ik dit.

code:
1
2
SELECT max(post_ID), tblPosts.Date FROM tblTopics, tblPosts 
WHERE tblTopics.Topic_ID = tblPosts.Topic_ID AND tblTopics.Forum_ID =1


Maar dat werkt mooi ook niet.
Toen kwam ik op het gekke idee een group by te gebruiken maar dat lijkt me ook niet de bedoeling.
Is het niet mogelijk om dit wat anders te doen als met een top 1 en dan andersom orderen?

Nu moet hij namelijk heel die tabel omdraaien en ik neem aan dat de max waarde in een tabel sneller te vinden is als ze niet al zijn opgeslagen in een andere virtuele tabel of iets?

/EDIT Foutje in die tabelletjes :)

[ Voor 4% gewijzigd door Mischa_NL op 16-03-2005 19:48 ]


  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Zo:
code:
1
2
3
4
5
6
7
SELECT tblPosts.Date
FROM tblTopics, tblPosts 
WHERE tblTopics.Topic_ID = tblPosts.Topic_ID
AND tblTopics.Forum_ID =1
AND tblTopics.Topic_ID = MAX(tblTopics.Topic_ID)
GROUP BY tblPosts.Topic_ID
LIMIT 1

Het is een gokje hoor, maar mischien werkt het zo.

Noushka's Magnificent Dream | Unity


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 19:05
misschien zo:

code:
1
2
3
4
5
SELECT MAX(`tblPosts.Date`)
FROM `tblPosts`
LEFT JOIN `tblTopics` USING(`Topic_ID`)
GROUP BY `tblPosts`.`Topic_ID`
HAVING `tblTopics`.`Forum_ID` = 1


Overigens zie ik geen veld `Topic_ID` in je `tblPosts`, maar uit je query maak ik op dat die er wel is?

[ Voor 26% gewijzigd door Morrar op 16-03-2005 19:43 ]


  • Mischa_NL
  • Registratie: Mei 2004
  • Laatst online: 01-02-2023
Om het wat simpeler te maken :

tblposts
IDDate
120-2-2004
221-2-2004
322-2-2004
423-2-2004
523-2-2004


Nu wil ik de datum weten van de MAX ID.
EDIT/ Dus niet de max datum ivm zomer/wintertijd wisselingen kan dat fout gaan. dmv de ID klopt het altijd.

Het kan zo :

Access
code:
1
SELECT TOP 1 Date FROM tblPosts ORDER BY ID DESC

Mysql (geloof zo)
code:
1
SELECT Date FROM tblPosts ORDER BY ID DESC LIMIT 1


Maar ik wil dit een beetje dbms onafhankelijk maken. Dus leek het mij makkelijker als het met de max functie zou kunnen.
De row met de max id selecteren. Hiervan de datum pakken...

Misschien is het op dit tabelletje iets duidelijker aangezien je al die vage relaties niet hebt...
Het gaat toch om het idee of het mogelijk is...

BTW. Date is een reserved word maar access pikt het dus ik ga het niet veranderen. Dat is me net iets teveel werk in 20.000 regels source :P .

[ Voor 6% gewijzigd door Mischa_NL op 16-03-2005 19:55 ]


  • Morrar
  • Registratie: Juni 2002
  • Laatst online: 19:05
--- hier stond onzin ---

De query die je geeft is prima toch? Veel anders kan het niet, of je moet met subqueries aan de slag... Die LIMIT methode is de meest gangbare methode dan.

[ Voor 141% gewijzigd door Morrar op 16-03-2005 20:16 ]