在一天内计算非连续学生 ID 的唯一值



我正试图找出如何计算学生在线而不计算重复实例的所有实例。

例如,在下面的截图中,我希望看到一个列只计算学生登录的实例。所以,如果学生A在早上5点登录,count = 1。学生B在7点登录,Count = 2。在某一时刻,学生A注销并在上午8点重新登录,计数应该是2,而不是3。

谢谢!

tbody> <<tr>BCDED
Student 时间。 Desired Column (Count)
5点1
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_

看演示。

最新更新