MS SQL Server最后一个用户登录到具有多个用户的多个客户端

时间:2019-06-21 13:34:33

标签: sql-server

我有一个用户表,该表包含具有多个用户的多个客户端,每个用户的最后登录日期。我需要获取每个客户端的最新登录用户的日期。我已经尝试过max(date),但是这使我获得了每个客户端的每个用户的最后登录日期。

我的目标是让每个客户拥有一个最新登录日期的用户。

clc
clear
close all

revenue = ones(100,1);
opex = -1*ones(100,1);
opex(10:15,1) = 3;

revenueNeg = revenue;
revenueNeg(revenueNeg>0) = 0;
revenuePos = revenue;
revenuePos(revenuePos<0) = 0;
opexNeg = opex;
opexNeg(opexNeg>0) = 0;
opexPos = opex;
opexPos(opexPos<0) = 0;
yDataNeg = [revenueNeg, opexNeg];
yDataPos = [revenuePos, opexPos];
hold on;
bar(yDataNeg,'stack')
bar(yDataPos,'stack')
legend('Revenue','Opex');
hold off;

我正在寻找用户的登录日期最近的地方

 SELECT DISTINCT(u.clientid),u.userid,Max(u.lastLogin) as lastLogin
 FROM users u
 WHERE u.clientid IN (10,20,30,40)
 GROUP BY u.clientid,u.userid,u.lastLogin

 clientid  userid  lastLogin
    10        1      a date
    10        2      a date
    10        3      a date
    20        4      a date
    20        5      a date
    30        6      a date
    30        7      a date
    30        8      a date
    30        9      a date
    and so on

1 个答案:

答案 0 :(得分:0)

以下示例脚本使用row_number()CTE来获取每个具有最后登录名的客户端的用户 请根据您的表结构和列名更新脚本。

declare @mytable as table(client varchar(50),myuser varchar(50),lastlogin datetime)

insert into @mytable values
('client1','user11','2019-06-15 2:57PM'),
('client1','user12','2019-06-12 7:47PM'),
('client2','user21','2019-06-13 8:30PM'),
('client2','user22','2019-06-17 9:00AM'),
('client3','user31','2019-06-10 10:57PM'),
('client3','user32','2019-06-10 11:57PM')

;with cte as(
select client,myuser,lastlogin,row_number() over(partition by client order by lastlogin desc) r# from @mytable )
select * from cte where r#=1