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
希望这有帮助