我正试图找出如何计算学生在线而不计算重复实例的所有实例。
例如,在下面的截图中,我希望看到一个列只计算学生登录的实例。所以,如果学生A在早上5点登录,count = 1。学生B在7点登录,Count = 2。在某一时刻,学生A注销并在上午8点重新登录,计数应该是2,而不是3。
谢谢!
Student | 时间。 | Desired Column (Count) | 5点 | 1 | B
---|---|---|
7点 | 2 | |
8点 | 2 | |
9点 | 3 | |
10点 | 4 | |
11点 | 5 | |
12点 | 5 |
一种选择,使用exists操作符和相关子查询来检查学生之前是否登录过:
SELECT Student, Time_,
SUM(flag) OVER (ORDER BY Time_) AS expected_count
FROM
(
SELECT *,
CASE
WHEN EXISTS(SELECT 1 FROM table_name D WHERE D.Student = T.Student AND D.Time_<T.Time_)
THEN 0 ELSE 1
END AS flag
FROM table_name T
) D
ORDER BY Time_
看演示。