Hoi, ik heb een tabel:
Deze tabel zal vele vele records gaan bevatten, en ik wil er nu een grafiekje van maken. Dat gaat wel lukken, maar nu moet ik een query op de database doen zodat er niet zoveel-duizend result-rows uitkomen, maar slechts 200 (bijvoorbeeld).
Dit doe je natuurlijk met een LIMIT 200. Maarrrr, in dezelfde query is ook een start en eind-datetime opgegeven, en nu wil ik niet de eerste 200 hebben of de laatste 200, maar 200 over de tijd (ongeveer) gelijkmatig verdeelde rijen.
Vraag: hoe doe ik dit?
Mijn idee was in eerste instantie: de tijd die ertussen zit (zeg 3600 seconden) te delen door 200 (=18), en dus een conditie op te nemen dat de timestamp-verschillen wel groter zijn dan 18 (ook dit weet ik niet verder uit te werken). Nadeel hiervan zou dan weer zijn dat je misschien niet precies 200 results hebt.
Edit: Tweede idee (samen met mensen op MSN bedacht): gewoon alle rijen selecteren die aan tijdstip voldoen (begin/eind) gesorteerd op dat tijdstip, en dan alleen de i-de rij lezen (dus 3600 rijen, dan alleen rij 0+a*18, voor a=0 tm 200).. Dit zal wel gaan werken, maar net is anders..
Ideeën? Dank alvast!
code:
1
2
3
| id - int timestamp - datetime value - varchar |
Deze tabel zal vele vele records gaan bevatten, en ik wil er nu een grafiekje van maken. Dat gaat wel lukken, maar nu moet ik een query op de database doen zodat er niet zoveel-duizend result-rows uitkomen, maar slechts 200 (bijvoorbeeld).
Dit doe je natuurlijk met een LIMIT 200. Maarrrr, in dezelfde query is ook een start en eind-datetime opgegeven, en nu wil ik niet de eerste 200 hebben of de laatste 200, maar 200 over de tijd (ongeveer) gelijkmatig verdeelde rijen.
Vraag: hoe doe ik dit?
Mijn idee was in eerste instantie: de tijd die ertussen zit (zeg 3600 seconden) te delen door 200 (=18), en dus een conditie op te nemen dat de timestamp-verschillen wel groter zijn dan 18 (ook dit weet ik niet verder uit te werken). Nadeel hiervan zou dan weer zijn dat je misschien niet precies 200 results hebt.
Edit: Tweede idee (samen met mensen op MSN bedacht): gewoon alle rijen selecteren die aan tijdstip voldoen (begin/eind) gesorteerd op dat tijdstip, en dan alleen de i-de rij lezen (dus 3600 rijen, dan alleen rij 0+a*18, voor a=0 tm 200).. Dit zal wel gaan werken, maar net is anders..
Ideeën? Dank alvast!
[ Voor 14% gewijzigd door DRvDijk op 09-10-2005 14:52 ]