Sql 如何在两个连续条件下使用行数函数
我的桌子看起来像这样:Sql 如何在两个连续条件下使用行数函数,sql,tsql,Sql,Tsql,我的桌子看起来像这样: ID IN_TIME SOURCE LOGIN_NAME 303954772 2019-01-01 06:37:33.900 R ATMUSER 303954772 2019-01-01 06:43:51.667 R ATMUSER 303954866 2019-01-01 07:34:47.790 R ATMUSER 303955362 2019-01-01 08:58:03.597 R ATM
ID IN_TIME SOURCE LOGIN_NAME
303954772 2019-01-01 06:37:33.900 R ATMUSER
303954772 2019-01-01 06:43:51.667 R ATMUSER
303954866 2019-01-01 07:34:47.790 R ATMUSER
303955362 2019-01-01 08:58:03.597 R ATMUSER
303955648 2019-01-01 10:26:23.533 R ATMUSER
303955700 2019-01-01 10:40:10.230 R BAYI
303955700 2019-01-02 10:40:10.933 R BAYI
303955700 2019-01-02 10:40:11.307 R BAYI
303954484 2019-01-01 11:06:07.440 R ATMUSER
303955854 2019-01-02 11:10:53.233 H GUEST
303933812 2019-01-02 11:11:27.247 R ATMUSER
303933812 2019-01-01 11:13:20.247 R ATMUSER
我想让大家看到的是:
ID IN_TIME SOURCE LOGIN_NAME ROW_NUMBER
303954866 2019-01-01 06:37:33.900 R ATMUSER 1
303955362 2019-01-01 06:43:51.667 R ATMUSER 2
303955648 2019-01-01 07:34:47.790 R ATMUSER 3
303955700 2019-01-01 08:58:03.597 R ATMUSER 4
303955700 2019-01-01 10:26:23.533 R ATMUSER 5
303954484 2019-01-01 11:06:07.440 R ATMUSER 6
303954772 2019-01-01 11:11:27.247 R ATMUSER 7
303955700 2019-01-01 10:40:10.230 R BAYI 1
303954772 2019-01-02 11:13:20.247 R ATMUSER 1
303955854 2019-01-02 10:40:10.933 R BAYI 1
303933812 2019-01-02 10:40:11.307 R BAYI 2
303933812 2019-01-02 11:10:53.233 H GUEST 1
如何使用行号函数实现这一点?或者在row_number列中只给出1行的其他方法也可以使用。这是一种间隙和孤岛的形式。为此,行号的差异似乎足够:
select t.*,
row_number() over (partition by source, login_name, seqnum - seqnum2 order by in_time) as row_number
from (select t.*,
row_number() over (order by in_time) as seqnum,
row_number() over (partition by source, login_name order by in_time) as seqnum2
from t
) t;
看起来您只想按in_time的datepart和登录名进行分区。类似下面的方法可能会奏效:
select a.*,
row_number() over (partition by cast(in_time as date),login_name order by in_time) as rownum
from table a
order by cast(in_time as date),login_name,in_time
希望这有帮助