Ik zit met een vraagstuk. Ik heb één tabel, met daarin, oa, de volgende velden:
De tabel is gevuld met call records per host. Ik haal met de volgende query het totaal aantal gesprekken op wat overlapt, gegroupeerd per dag.
Maar dit is niet wat ik wil. Ik wil het hoogst aantal simultane gesprekken op een willekeurig moment.
Dus als ik de volgende records heb:
Dan wil ik dus terug krijgen van SQL '3', omdat de 1e 3 records overlappen. De laatste 2 doen dat ook, maar 2 is minder dan 3, daarom wil ik 3 terug krijgen.
Ik heb werkelijkwaar geen idee hoe ik dit in SQL op ga lossen, en of dat uberhaupt wel mogelijk is. Is er toevallig iemand die mij de juiste richting kan aanwijzen? Momenteel heb ik een crappy oplossing in PHP gemaakt, maar dan kan ik de data niet gegroepeerd uit SQL halen en moet ik het in PHP weer sorteren. Allemaal kut dus.
//Update: bijgesloten query stuurt dus '5' terug, omdat er totaal 5 overlappende gesprekken zijn die dag.
ID* | INT | |
Host | varchar(15) | |
start | datetime | |
stop | datetime | |
duration | int | offtopic: Waarom deze er in zit, geen idee. Moet je bij de developer zijn. |
De tabel is gevuld met call records per host. Ik haal met de volgende query het totaal aantal gesprekken op wat overlapt, gegroupeerd per dag.
code:
1
2
3
4
5
6
7
8
9
| SELECT CONVERT(varchar,r1.start,103),COUNT(*) FROM tabel AS r1,tabel AS r2 WHERE r1.id != r2.id AND r1.host = '10.0.0.1' AND r2.host = '10.0.0.1' AND (r1.start >= r2.start AND r1.start <= r2.stop) AND (r1.stop >= r2.start AND r1.start <= r2.stop) GROUP BY CONVERT(varchar,r1.start,103) |
Maar dit is niet wat ik wil. Ik wil het hoogst aantal simultane gesprekken op een willekeurig moment.
Dus als ik de volgende records heb:
id | host | start | stop | duration |
1 | 10.0.0.1 | 10:00 | 10:05 | 5 |
2 | 10.0.0.1 | 10:03 | 10:09 | 8 |
3 | 10.0.0.1 | 10:04 | 10:09 | 6 |
4 | 10.0.0.1 | 10:10 | 10:13 | 3 |
5 | 10.0.0.1 | 10:12 | 10:15 | 3 |
Dan wil ik dus terug krijgen van SQL '3', omdat de 1e 3 records overlappen. De laatste 2 doen dat ook, maar 2 is minder dan 3, daarom wil ik 3 terug krijgen.
Ik heb werkelijkwaar geen idee hoe ik dit in SQL op ga lossen, en of dat uberhaupt wel mogelijk is. Is er toevallig iemand die mij de juiste richting kan aanwijzen? Momenteel heb ik een crappy oplossing in PHP gemaakt, maar dan kan ik de data niet gegroepeerd uit SQL halen en moet ik het in PHP weer sorteren. Allemaal kut dus.
//Update: bijgesloten query stuurt dus '5' terug, omdat er totaal 5 overlappende gesprekken zijn die dag.
Ik wil het er _niet_ over hebben.