在sql分区中按id和会话id排列,但按时间戳排序

dxxyhpgq  于 2021-07-13  发布在  Hive
关注(0)|答案(1)|浏览(434)

我有一张table如下:
用户ID会话idtimestamp1007e938c4437a01:30:301007e938c4437a01:30:33100c1fcfd8b1a252:40:001007b5e86d911033:20:00200bda6c87436712:20:00200bda6c87436712:25:00200aac5d66421a03:10:00200aac5d66421a03:11:00
我正在尝试按用户id、按时间戳排序(排序)对每个会话的\u id进行排序。我想要第二张table之类的。
我正在执行以下操作,但不按时间戳排序:

dense_rank() over (partition by user_id order by session_id) as visit_number

它以错误的顺序输出,当我按顺序添加时间戳时,它的行为就像一个row\u number()函数。
下面是我真正想要的结果:
用户ID会话idtimestamprank1007e938c4437a01:30:3011007e938c4437a01:30:331100c1fcfd8b1a252:40:0021007b5e86d911033:20:003200bda6c87436712:20:001200bda6c87436712:25:001200aac5d66421a03:10:002200aac5d66421a03:11:002

bxgwgixi

bxgwgixi1#

如果要按时间戳的小时分量对时间进行密集排序,可以提取小时。这将给出您指定的结果。在标准sql中,如下所示:

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

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

相关问题