Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[Oracle SQL plus] data verschil meerdere users bepalen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een tabel met daarin een lijst met users (een hoop users), om bepaalde redenen houd ik een soort log bij wanneer deze users inloggen (deze store ik dus in een oracle db). Nu wil ik voor alle users het verschil uitprinten tussen de eerste login datum (dus niet de registratie datum) en de laatste login, als laatste ook nog een gemiddeld verschil tussen alle users.

Wat ik tot nu toe heb is dat ik de eerste login datum van één enkele user wel kan bepalen door ze te ordenen op datum en dan rownum=1 te pakken, dit kan ook voor de meest recente login, alleen lukt dit niet voor alle users omdat je maar 1 row terug krijgt. Ik zat al te denken aan een loop door alle users heen maar kan niet zo goed bevatten hoe ik dit kan realiseren. Misschien dat jullie hier tips voor hebben?

Het maakt me niet zoveel uit om eerst alle data van de eerste login te printen, naar excel kopieren, dan de data van de laatste login, ook naar excel kopieren en zo de vergelijking te maken (denk dat dit wel het handigste is)..

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Kijk eens naar GROUP BY in combinatie met de MIN en MAX functies :)

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

SQL:
1
select UserID, min(LoginDate) as firstLogin, max(LoginDate) as lastLogin from users group by userid

Ik weet echter niet de datum functies van oracle, maar als je firstLogin aftrekt van lastLogin, dan heb je dus het verschil

Voor het totale gemiddelde (er vanuitgaand dat DateSub bestaat)
SQL:
1
select avg(DateSub(Max(LoginDate), Min(LoginDate))) from users group by userid


Daarnaast vind ik eigenlijk dat dit soort queries onder basis sql kennis vallen.

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
Bedankt voor de hulp, misschien behoort dit inderdaad tot de basis kennis van SQL, maar daar is een forum voor toch? :)

Ik heb een wat complexere vraag, wat als ik alleen het laatste bezoek wil meerekenen wanneer de gebruiker na 20:00 s'avonds heeft ingelogd? Dus het lijstje ziet er zo uit:

Logins gebruiker:
27-jan-2006 15:40:30 <-- Eerste login
11-feb-2006 22:41:01
24-jun-2007 09:51:22
01-feb-2008 23:23:55 <-- Laatste login, want na 20:00 s'avonds
03-feb-2008 12:14:00
Ik neem aan dat je dan alle logins moet doorlopen, alsnog dmv een loop? En zo ja, heeft er iemand misschien een klein opzetje?

  • WhizzCat
  • Registratie: November 2001
  • Laatst online: 03-10 00:20

WhizzCat

www.lichtsignaal.nl

WHERE clausule gebruiken.

WHERE logintime > 20.00

Iets in die trant :)

Gezocht: netwerkbeheerder
Als je het niet aan een 6-jarige kan uitleggen, snap je er zelf ook niks van! - A. Einstein


Verwijderd

Topicstarter
Dan filtert ie alleen de resultaten waar de max(login) daadwerkelijk boven de 20:00 was toch? Niet zozeer de laatste keer dat iemand na achten ingelogd heeft..

Verwijderd

Topicstarter
Tevens een vraag, hoe kun je in de where clausule aangeven dat de last login na 20:00 was bij de query:
select UserID, min(LoginDate) as firstLogin, max(LoginDate) as lastLogin from users group by UserID
Eronderzetten 'WHERE lastLogin > (yyyy:mm:dd) 20:00' werkt voor zover ik weet niet en als je 'WHERE max(LoginDate) > (yyyy:mm:dd) 20:00' herhaalt werkt het uberhaupt niet

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Als je geaggregeerde resultaten wilt filreren dan gebruik je een having clausule.
Alleen op tijd filteren doe je bijvoorbeeld zo: to_char(lastLogin,'hh24mi') > '2000'

Who is John Galt?

Pagina: 1