SQL Запрос пользователей установить номер строки и последнюю дату - PullRequest
2 голосов
/ 07 января 2020

У меня есть таблица, похожая на эту:

CREATE TABLE [dbo].[Test3](
[UserId] [int] NULL,
[RoleId] [int] NULL,
[lastDate] [date] NULL
) ON [PRIMARY]

INSERT INTO [dbo].[Test3]([UserId],[RoleId],[lastDate])
VALUES
(1,1,'2019-02-02'),
(1, NULL, '2019-02-02'),
(1, 2, '2019-02-03'),
(2, 1, '2019-02-05'),
(2, 1, '2019-02-02'),
(2, 1, '2019-02-02'),
(3, 3, '2019-02-02'),
(3, NULL, '2019-02-02')

Как мне задать номер строки и максимальную дату последнего списка пользователей с одинаковым «идентификатором пользователя»? Мне нужен вывод должен выглядеть следующим образом.

rownumber  userid   RoleId   lastdate
1          1        2       2019-02-03
2          1        1       2019-02-03
3          1        NULL    2019-02-03
1          2        1       2019-02-05
2          2        1       2019-02-05
3          2        1       2019-02-05
1          3        3       2019-02-02
2          3        NULL    2019-02-02

Ответы [ 2 ]

4 голосов
/ 07 января 2020

Вы можете использовать row_number и max с оконными функциями

Я думаю, что этот приведенный ниже код может помочь вам.

SELECT ROW_NUMBER() OVER(PARTITION BY UserId ORDER BY RoleId DESC) AS ROWNUMBER,
   userid,
   roleid,
   MAX(lastDate) OVER(PARTITION BY userId) AS LAST
FROM   test3
1 голос
/ 07 января 2020

Вы можете использовать row_number() & max() с оконной функцией:

select t.*,
       row_number() over (partition by userid 
                          order by (case when roleid is null then 2 else 1 end), 
                                    roleid desc
                         ) as rowno,
       max(lastdate) over (partition by userid) as lastdate
from table t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...