[MSSQL] Max overlappende records per dag

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • magiel
  • Registratie: Januari 2005
  • Laatst online: 11-09 14:18
Ik zit met een vraagstuk. Ik heb één tabel, met daarin, oa, de volgende velden:
ID*INT
Hostvarchar(15)
startdatetime
stopdatetime
durationint
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:
idhoststartstopduration
110.0.0.110:0010:055
210.0.0.110:0310:098
310.0.0.110:0410:096
410.0.0.110:1010:133
510.0.0.110:1210:153


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.


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Je kunt met een subquery voor elke record het aantal overlappende gesprekken tellen.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
magiel schreef op maandag 22 november 2010 @ 22:40:
offtopic:
Waarom deze er in zit, geen idee. Moet je bij de developer zijn.
offtopic:
Waarom de stop erin zit moet je je afvragen; met een duration weet je namelijk altijd hoe lang iets geduurd heeft; met een start/stop krijg je hele lelijke dingen als er bijv. overgegaan wordt van zomer- naar wintertijd ;) En aangezien je gesprekken waarschijnlijk op duratie afrekent kun je nog wel eens onbedoeld een uur korting gaan geven (of zelfs gaan crediteren :P )

[ Voor 14% gewijzigd door RobIII op 23-11-2010 09:07 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij