| 记录时间|会话ID|日志之间的时间|
| - ------| - ------| - ------|
| 12时00分01秒|AAAAAA|四个|
| 12时00分05秒|AAAAAA|四个|
| 12时00分09秒|AAAAAA|二九六|
| 12时05分05秒|AAAAAA|十个|
| 12时05分15秒|AAAAAA|零|
| 12时06分15秒|BBBBBB|十六|
| 12时06分31秒|BBBBBB|一百六十四|
| 12时09分15秒|BBBBBB|十个|
| 十二点九分二十五秒|BBBBBB|零|
| 十二点十一分四十五秒|中交|五个|
| 十二点十一分五十秒|中交|二十五|
| 十二点十二分十五秒|中交|零|
我有一个存储用户日志的数据库。它由
- *[Log Time]**-DATETIME数据类型,为简单起见,我在这里排除了日期,我们可以假设所有行都在同一天
- *[会话ID]**-VARCHAR数据类型,显示用户与应用程序交互的会话
- *[Time Between Logs]**-INT数据类型,我自己编写了这个代码,以查找连续日志之间的时间(以秒为单位)。请注意,time between logs列显示当前列和下一列之间的时间,因此,特定[Session ID]的最后一个时间为NULL。
- 目标**:我想排除用户离线一段时间,但应用在后台运行,因此会话ID保持不变的情况。当同一会话ID下的两个连续日志具有较大的
[Time Between Logs]
时,可以识别这些日志。在本例中,我将阈值取为2分钟因此,如果[Time Between Logs]
超过120秒,则我们不应考虑该[Session ID]
中的后续行。
- 目标**:我想排除用户离线一段时间,但应用在后台运行,因此会话ID保持不变的情况。当同一会话ID下的两个连续日志具有较大的
我的最终目标是计算用户一天中每次会话的时长,通过删除后续日志来计算应用在后台运行的时间,这将变得更加准确。
因此,所需结果为
| 记录时间|会话ID|日志之间的时间|
| - ------| - ------| - ------|
| 12时00分01秒|AAAAAA|四个|
| 12时00分05秒|AAAAAA|四个|
| 12时00分09秒|AAAAAA|二九六|
| 12时06分15秒|BBBBBB|十六|
| 12时06分31秒|BBBBBB|一百六十四|
| 十二点十一分四十五秒|中交|五个|
| 十二点十一分五十秒|中交|二十五|
| 十二点十二分十五秒|中交|零|
到目前为止,我只能想出以下解决方案-
SELECT
[Log Time], [Session ID], [Time Between Logs]
FROM
LOG_TABLE AS [T1]
WHERE
[T1].[Log Time] < (SELECT MIN(T2.[Log Time])
FROM LOG_TABLE AS [T2]
WHERE T2.[Session ID] = T1.[Session ID]
AND T2.[Time Between Logs] > 120)
但对于[Session ID]
没有记录的情况,这不会给出任何记录
T2.[Time Between Logs] > 120
有人能帮我吗?先谢了。
1条答案
按热度按时间dzhpxtsq1#
不必深入研究以获得理想的解决方案,只需使用代码尝试将子查询 Package 在
ISNULL()
中,如下所示: