SQL Query获取平均时间

时间:2011-08-03 16:01:17

标签: sql select sqlite

我的数据库中有4列

UserName,Date,Time,LoginType

UserName is a varchar field
Date is a date field
Time is a time field (in 24 hour format)
LoginType is a varchar field

LoginType可以包含两个字符串“LOGIN”,“SHUTDOWN”

中的一个

我希望得到有人登录或关机的平均时间 我也想知道无尽的早期三角洲。

因此,对于这个例子,假设学生必须在8:30之前上课,并且必须在10:30之前登记

因此,我们还假设样本数据如下

George.Lucas 8:45 2011-07-22 LOGIN
Eric.TheRed 9:00 2011-07-22 LOGIN
Dr.Who 9:01 2011-07-22 LOGIN
Dr.Who 11:01 2011-07-22 SHUTDOWN
George.Lucas 11:45 2011-07-22 SHUTDOWN
Eric.TheRed 12:00 2011-07-22 SHUTDOWN
  1. 我们可以看到乔治迟到了15分钟,他迟到了1小时15分钟
  2. Eric迟到了30分钟
  3. Eric向SHUTDOWN迟到了2小时30分
  4. Dr.Who晚了31分钟LOGIN
  5. Dr.Who在SHUTDOWN晚了31分钟
  6. 由于

1 个答案:

答案 0 :(得分:1)

这将为您提供给定用户在登录和关闭之间的平均时间,即使同一天有多个会话,并假设用户需要在再次登录之前关闭:

SELECT login.UserName, 
  AVG(shutdown.Date - login.Date)
FROM table login,
  table shutdown
WHERE login.UserName = shutdown.UserName
      AND login.LoginType = 'LOGIN'
      AND shutdown.LoginType = 'SHUTDOWN'
      AND shutdown.Date = (SELECT MIN(t.Date)
                           FROM table t
                           WHERE t.UserName = login.UserName
                                 AND t.LoginType = 'SHUTDOWN'
                                 AND t.Date > login.Date)
GROUP BY login.UserName;

要找出预期和有效登录/关闭时间之间的差异,您只需要分别从login.Timeshutdown.Time减去8:30和10:30。