我有一个表格如下:
用户名 | 会话 ID | 时间戳 |
---|---|---|
100 | 7e938c4437a0 | 1:30:30 |
100 | 7e938c4437a0 | 1:30:33 |
100 | c1fcfd8b1a25 | 2:40:00 |
100 | 7b5e86d91103 | 3:20:00 |
200 | bda6c8743671 | 2:20:00 |
200 | bda6c8743671 | 2:25:00 |
200 | aac5d66421a0 | 3:10:00 |
200 | aac5d66421a0 | 3:11:00 |
我正在尝试按 user_id 对每个 session_id 进行排序,按顺序(按顺序排序)时间戳。我想要第二张桌子之类的东西。
我正在执行以下操作,但没有按时间戳排序:
dense_rank() over (partition by user_id order by session_id) as visit_number
它以错误的顺序输出,当我按顺序添加时间戳时,它的行为就像一个 row_number() 函数。
以下是我真正想要得到的结果:
用户名 | 会话 ID | 时间戳 | 排名 |
---|---|---|---|
100 | 7e938c4437a0 | 1:30:30 | 1 |
100 | 7e938c4437a0 | 1:30:33 | 1 |
100 | c1fcfd8b1a25 | 2:40:00 | 2 |
100 | 7b5e86d91103 | 3:20:00 | 3 |
200 | bda6c8743671 | 2:20:00 | 1 |
200 | bda6c8743671 | 2:25:00 | 1 |
200 | aac5d66421a0 | 3:10:00 | 2 |
200 | aac5d66421a0 | 3:11:00 | 2 |
答案 0 :(得分:0)
如果您想通过时间戳的 hour 组件进行密集排名,您可以提取小时。这应该给出您指定的结果。在标准 SQL 中,这看起来像:
dense_rank() over (partition by user_id order by extract(hour from timestamp) as visit_number
当然,日期/时间函数高度依赖于数据库,因此您的数据库可能具有不同的提取小时的函数。