sql分区中的dense_rank按id和session id排序,但按时间戳排序

时间:2021-04-19 22:06:14

标签: sql hive hql rank dense-rank

我有一个表格如下:

<头>
用户名 会话 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

1 个答案:

答案 0 :(得分:0)

如果您想通过时间戳的 hour 组件进行密集排名,您可以提取小时。这应该给出您指定的结果。在标准 SQL 中,这看起来像:

dense_rank() over (partition by user_id order by extract(hour from timestamp) as visit_number

当然,日期/时间函数高度依赖于数据库,因此您的数据库可能具有不同的提取小时的函数。