【发布时间】:2021-12-15 05:11:30
【问题描述】:
我有一个包含handDate 的游戏日志表,如下所示:
| ID | handDate |
|---|---|
| 1 | 2019-06-30 16:14:02.000 |
| 2 | 2019-07-12 06:18:02.000 |
| 3 | ... |
我想根据这个表计算游戏会话(开始和结束),因为:
- 如果 1 小时后没有任何活动,则会考虑新会话。
- 一个会话可以存在 2 天
所以我想要这样的结果:
| day | session_start | sesssion_end |
|---|---|---|
| 2019-06-30 | 2019-06-15 16:14:02.000 | 2019-06-15 16:54:02.000 |
| 2019-07-02 | 2019-07-02 16:18:02.000 | 2019-07-02 17:18:02.000 |
| 2019-07-02 | 2019-07-02 23:18:02.000 | 2019-07-03 03:18:02.000 |
| 2019-07-03 | 2019-07-03 06:18:02.000 | 2019-07-03 08:28:02.000 |
目前我正在使用以下代码,但无法实现我想要的:
SELECT *
FROM (
SELECT *,
strftime( '%s', handDate) - strftime( '%s', prev_event) AS inactivity
FROM (
SELECT handDate,
date( handDate) as day,
FIRST_VALUE( handDate) OVER (PARTITION BY date( handDate) ORDER BY handDate) AS first_event,
MIN(handDate) OVER (PARTITION BY date( handDate) ORDER BY handDate),
MAX(handDate) OVER (PARTITION BY date( handDate) ORDER BY handDate),
LAG( handDate) OVER (PARTITION BY date( handDate) ORDER BY handDate ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS prev_event,
LEAD( handDate) OVER (PARTITION BY date( handDate) ORDER BY handDate) AS next_event
FROM hands
) last
) final
我正在使用 SQLite。
【问题讨论】: