有个问题,要不要精确到时间,比如再有一条记录为13:05他与12:08的时间没有到达一小时,可是如果直接按照小时排序的话,这就是一个新的序列。如果需要精确到分钟并且以每个用户的第一个时间为准,那就有难度了,因为要判断每个的开始和结束时间进行分组。,而且每一行都要去判断。假设,每59分操作一次,那么这一天都是一个分组。
如果不用那么麻烦,直接就是按照小时分组,那么
select 用户,时间,rank()over(partition by 用户,substr(时间) order by 时间) from table
我不知道你的时间字段是怎么格式,所以直接写的substr可能还需要转化和具体的截取。这里只是写了一个大概的样子
建了一个测试表testtab,操作如下:
SQL> select yh,to_char(sj,'HH24:SS') from testtab;
YH TO_CH
-------------------- -----
USERa 12:08
USERa 12:09
USERa 12:10
USERa 14:08
USERa 14:09
USERa 14:11
6 rows selected.
SQL> SELECT yh,to_char(sj,'HH24:SS'),rank() over(partition by to_char(sj,'HH24') order by sj) from testtab;
YH TO_CH RANK()OVER(PARTITIONBYTO_CHAR(SJ,'HH24')ORDERBYSJ)
-------------------- ----- --------------------------------------------------
USERa 12:08 1
USERa 12:09 2
USERa 12:10 3
USERa 14:08 1
USERa 14:09 2
USERa 14:11 3
6 rows selected.
SQL>
select t.*,row_number() over(partition by substr(时间,1,2) order by 时间) row_number from a t