Toon posts:

[MySQL] Probleem met query

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi!

Ik heb een tabel 'afspraak' met volgende velden:
afspraak_id
afspraak_timestamp
(natuurlijk nog meer, maar dat is nu niet relevant). In die tabel staan alle komende afspraken.

Nu wou ik een query maken dat het volgende doet: "selecteer de eerste volgende afspraak-dag (dus een dag met minstens 1 afspraak), en haal tegelijkertijd alle afspraken op diezelfde dag".

Ik kwam met volgende query uit:
code:
1
2
3
4
select afspraak_id, afspraak_timestamp, min(afspraak_timestamp) as hoogste
from afspraak
group by afspraak_timestamp
having afspraak_timestamp > DATE_ADD(hoogste, INTERVAL -1 DAY) AND afspraak_timestamp < DATE_ADD(hoogste, INTERVAL 1 DAY)


Echter geeft deze query gewoonweg alle afspraken terug, en telkens hoogstens 1 per dag? Dat snap ik niet goed?

Iemand een idee hoe dit wel moet?

PS: ik weet dat DATE_ADD(+1 day) eigenlijk fout is, maar dat maakt op dit moment nog niets uit. Ik moet in principe 'vorige middernacht en komende middernacht' bepalen. Zo'n functie vond ik niet in de mysql docs, dus ik zal waarschijnlijk een simpele substring moeten maken. Dat terzijde :)

Thanks!

[ Voor 3% gewijzigd door Verwijderd op 04-01-2003 00:36 ]


  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
Dat je alle afspreken terug krijgt, komt waarschijnlijk omdat het veld 'afspraak_timestamp' naast de datum ook tijd bevat en dus uniek is in die tabel. Hierdoor heeft GROUP BY geen enkel nut, want dat heeft alleen nut wanneer je velden met dezelfde waardes wilt groeperen.

Verwijderd

Topicstarter
Hoe moet ik het dan wel doen? Want ik heb toch wel degelijk 'min(afspraak_timestamp) as hoogste' (fuck, taalfout, moet natuurlijk laagste zijn :p) nodig om de eerste volgende afspraak-dag te weten?

  • KillR-B
  • Registratie: Mei 2002
  • Laatst online: 20-01 20:49
Ik heb het niet kunnen testen, maar om de datums te goeperen moet je dit maar eens proberen:

SQL:
1
2
3
4
5
SELECT afspraak_id, 
       DATE_FORMAT(FROM_UNIXTIME(afspraak_timestamp), '%Y-%m-%d') AS dates,
       MIN(afspraak_timestamp) AS hoogste
FROM afspraak
GROUP BY dates  ......de rest.....

[ Voor 11% gewijzigd door KillR-B op 04-01-2003 01:42 ]


Verwijderd

Topicstarter
Haja, inderdaad! Groeperen op een 'volle' timestamp heeft inderdaad geen zin!

Nu is mijn query zo:
code:
1
2
3
4
5
select afspraak_id, afspraak_timestamp, min(afspraak_timestamp) as laagste
from afspraak
group by DATE_FORMAT(afspraak_timestamp, '%Y-%m-%d')
having afspraak_timestamp > DATE_ADD(laagste, INTERVAL -1 DAY) AND
       afspraak_timestamp < DATE_ADD(laagste, INTERVAL +1 DAY)


De waarde van 'laagste' klopt nu. Maar nu toont hij nog steeds 1 row, hoewel er in mijn situatie op de volgende afspraak-dag 4 afspraken gepland zijn.

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

dusty

Celebrate Life!

aangezien je MIN in de select hebt zitten, zal hij inderdaad alleen de laagste terug geven, je query doet precies wat hij dus moet doen. Wil je ook alle andere afspraken zal je dus je query moeten aanpassen. :)

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


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 10:45
Waarom gebruik je een timestamp, waarom niet een mysql_date, dan kan je veel gemakkelijker werken met dit soort query's.

Verwijderd

Topicstarter
dusty schreef op 04 januari 2003 @ 02:38:
aangezien je MIN in de select hebt zitten, zal hij inderdaad alleen de laagste terug geven, je query doet precies wat hij dus moet doen. Wil je ook alle andere afspraken zal je dus je query moeten aanpassen. :)
Ik ga er deze avond verder aan knoeien :o Maar waarschijnlijk moet ik de min(..) uit de SELECT case halen, en in mijn WHERE of HAVNING stoppen. Vermoed ik althans :+
djluc schreef op 04 januari 2003 @ 11:12:
Waarom gebruik je een timestamp, waarom niet een mysql_date, dan kan je veel gemakkelijker werken met dit soort query's.
Ik gebruik gewoon timestamp, met lengte 12. (http://www.mysql.com/doc/en/Date_and_time_types.html) Wat bedoel jij nu?

[ Voor 9% gewijzigd door Verwijderd op 04-01-2003 14:28 ]

Pagina: 1