[SQL] Hoelang op welke dag/maand?

Pagina: 1
Acties:
  • 117 views sinds 30-01-2008
  • Reageer

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Ik heb een tabel met sessies over het verbinden met internet met een dail-up connectie:
code:
1
2
3
4
5
6
SessionId    Start          Stop
7       2-3-2002 22:14:59   2-3-2002 22:15:04
8       2-3-2002 22:15:08   2-3-2002 22:15:09
9       2-3-2002 22:15:12   2-3-2002 22:15:23
10       2-3-2002 22:15:41  2-3-2002 22:16:38
11       2-3-2002 22:16:39  2-3-2002 22:16:54

Is het nou mogelijk met een SQL query om te weten te komen hoelang er is verbonden per dag? En ook een query voor maanden?

Ik hoop het wel, ik kwam er niet echt uit omdat je zit met het verschil steeds. Het zou me iig een (hoop) code schelen.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Kijk eens naar de date & time functions.. D'r zit vast wel een functie bij om het verschil uit te rekenen. Dan heb je ipv start en stop de totale tijd van die sessie.. Wil je het totaal hebben, dan gebruik je vervolgens som...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • disjfa
  • Registratie: April 2001
  • Laatst online: 12-05 15:11

disjfa

be

Op zaterdag 02 maart 2002 22:31 schreef Janoz het volgende:
Kijk eens naar de date & time functions.. D'r zit vast wel een functie bij om het verschil uit te rekenen. Dan heb je ipv start en stop de totale tijd van die sessie.. Wil je het totaal hebben, dan gebruik je vervolgens som...
das toch alleen met sql server :?..... (ben verder nie zo veel thuis in access e.a.)
* disjfa is verder helemaal nie thuis in die andere dingen verder, zodat jullie dat weten ;)

disjfa - disj·fa (meneer)
disjfa.nl


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Het gaat hier idd om een MS Access database, maar kan ik daar die functies niet in gebruiken ofzo.

Hoe zou die query er dan ongeveer uit zien? Dan probeer ik zelf wel of het gaat lukken.

"The shell stopped unexpectedly and Explorer.exe was restarted."


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Weet ik veel .. OP msdn of onder F1 zal vast wel iets staan over datediff oid.. Vraag desnoods de paperclip :+

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

ik zou zoiets maken:
code:
1
2
3
select sum(<start kolom - eind kolom>)
from table
group by <methode om de start kolom naar d/m/y formaat om te zetten>

Klaar voor een nieuwe uitdaging.


  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Oke, bedankt, zal ik es kijken of het hier mee gaat lukken.

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

Is niet zo heel gemakkelijk. Is al best moeilijk om het per dag of maand op te tellen, zonder dat je er rekening mee houdt dat een sessie ook de grenzen van een dag kan overschrijden (0:00 uur). Als ik tijd/zin heb zal ik er even over nadenken vandaag.

Verwijderd

OK, hier is tie. Is wel opgelost met 2 queries per stuk (had geen zin m'n tanden er helemaal op stuk te bijten).

Als uitgangstabel heb ik genomen:
Afbeeldingslocatie: http://www.endoria.net/upload/?bekijk=1015159190

Ik heb vervolgens 2 queries gemaakt.

JelmersQuery_Dag:
code:
1
2
3
4
SELECT Format([Start],"yyyy-mm-dd") AS Datum_Dag, 
Sum([Stop]-[Start]) AS Tijdsverschil
FROM JelmerVos
GROUP BY Format([Start],"yyyy-mm-dd")

en JelmerWeergave_Dag:
code:
1
2
3
4
5
6
SELECT JelmersQuery_Dag.Datum_Dag, 
([Tijdsverschil]*24) Mod 24 AS Uren, 
([Tijdsverschil]*24*60) Mod 60 AS Minuten, 
([Tijdsverschil]*24*60*60) Mod 60 AS Seconden, 
TimeSerial([Uren],[Minuten],[Seconden]) AS [Online Tijd]
FROM JelmersQuery_Dag

Om de gegevens per maand te bekijken hoef je maar weinig aan te passen.

JelmersQuery_Maand:
code:
1
2
3
4
SELECT Format([Start],"yyyy-mm") AS Datum_Maand, 
Sum([Stop]-[Start]) AS Tijdsverschil
FROM JelmerVos
GROUP BY Format([Start],"yyyy-mm")

en JelmerWeergave_Maand:
code:
1
2
3
4
5
6
SELECT JelmersQuery_Maand.Datum_Maand, 
([Tijdsverschil]*24) Mod 24 AS Uren, 
([Tijdsverschil]*24*60) Mod 60 AS Minuten, 
([Tijdsverschil]*24*60*60) Mod 60 AS Seconden, 
TimeSerial([Uren],[Minuten],[Seconden]) AS [Online Tijd]
FROM JelmersQuery_Maand

Als je per maand ook dagen afzonderlijk wil weergeven kun je uiteraard de DateSerial er nog op los laten.

Resultaatsets:
Afbeeldingslocatie: http://www.endoria.net/upload/?bekijk=1015160046

Verwijderd

Oh ja, en ik heb als uitgangspunt genomen dat een sessie meegeteld wordt op de dag dat de sessie startte. Als je sessies over daggrenzen heen gaan zul je dus eerst bv. een werktabel moeten maken om de sessies in stukken te hakken.

edit:
Ik zie dat ik uiteindelijk de oplossing van Chem gewoon nog een keer bedacht had. Ik was anders begonnen maar kwam toch daarop uit...

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
IJskoud> Mag ik je hartelijk bedanken voor je werk. Dit is echt zeer goed.
Ik zelf dacht dat het simpeler was, maar blijkt dus niet zo te zijn. Dat overlappen van een sessie over 2 (of meer) dagen laat ik maar voor wat het is, zal denk ik niet zoveel voorkomen.

Nogmaals, bedankt voor je inzet. Ik zal er mee aan de slag. :)

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

functie datediff gebruiken was misschien makkelijker geweest

  • jelmervos
  • Registratie: Oktober 2000
  • Niet online

jelmervos

Simple user

Topicstarter
Op maandag 04 maart 2002 13:52 schreef watnou het volgende:
functie datediff gebruiken was misschien makkelijker geweest
Hoe zien de query's er dan uit?

"The shell stopped unexpectedly and Explorer.exe was restarted."


Verwijderd

DateDiff geeft per onderdeel van een datum (bv. dag) een afgeronde hoeveelheid eenheden verschil. Dus als 2 datum/tijdvelden minder dan een dag maar meer dan een halve dag verschillen, bv 16 uur, dan geeft een DateDiff met als argument "dag" de waarde "1". Zou je vervolgens een DateDiff uitvoeren op "uur" dan krijg je "16". Dan krijg je als totaal dus ten onrechte het idee dat er 1 dag en 16 uur is ge-internet...

Vandaar dat ik geen DateDiff heb gebruikt.
Pagina: 1