יול.09

שאילתה על פעילות המשתמשים

שאילתה על פעילות המשתמשים

יש טבלה שמחזיקה נתונים על פעילות של משתמשים. צריך לכתוב שאילתה שתחזיר מספר מקסימלי של חיבורים בו זמניים של אותו משתמש וכל משתמש וגם זמן מינימום מתי שזה קרה.

  1. WITH log(username, logon_time , logoff_time) AS (
  2. SELECT 'USER1', CAST('2013-08-08 1:00:00' as datetime)
  3. , CAST('2013-08-08 10:00:00'as datetime) UNION ALL
  4. SELECT 'USER1', '2013-08-08 6:00:00', '2013-08-08 14:00:00' UNION ALL
  5. SELECT 'USER1', '2013-08-08 4:00:00', '2013-08-08 12:00:00' UNION ALL
  6. SELECT 'USER1', '2013-08-08 8:00:00', '2013-08-08 17:00:00' UNION ALL
  7. SELECT 'USER1', '2013-08-08 16:00:00', '2013-08-08 18:00:00' UNION ALL
  8. SELECT 'USER1', '2013-08-08 9:00:00', '2013-08-08 16:00:00' UNION ALL
  9. SELECT 'USER2', '2013-08-08 1:00:00', '2013-08-08 3:00:00' UNION ALL
  10. SELECT 'USER2', '2013-08-08 2:00:00', '2013-08-08 12:00:00' UNION ALL
  11. SELECT 'USER2', '2013-08-08 11:00:00', '2013-08-08 13:00:00' UNION ALL
  12. SELECT 'USER2', '2013-08-08 10:00:00', '2013-08-08 14:00:00'
  13. ), intersect_counts AS (
  14. SELECT l.username
  15. , COUNT(*) AS qty
  16. , l.logon_time
  17. FROM log AS l
  18. INNER JOIN log AS l2 ON l.username = l2.username
  19. AND l.logon_time BETWEEN l2.logon_time AND l2.logoff_time
  20. GROUP BY l.username, l.logon_time
  21.  
  22. )
  23. ,ordered AS (
  24. SELECT username, qty, logon_time
  25. , ROW_NUMBER() OVER (
  26. PARTITION BY username
  27. ORDER BY qty DESC
  28. ) AS rn
  29. FROM intersect_counts
  30. )
  31.  
  32. SELECT username, qty, logon_time,rn
  33. FROM ordered
  34. WHERE rn = 1;


תגיות:
שתף את הסיפור הזה:

תגובות(0)

השאירו תגובה

קפטצ'ה לא מתאימה

תגובה