You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中基于最后登录时间获取账户信息

基于最后登录时间获取SQL Server账户信息的实现方法

现有查询语句

SELECT 
    c.* ,concat ( s.FirstName,'',s.LastName) as FullName
FROM [dbo].[Monitor] c
left join acc.Staff s on s.Id = c.UserId where c.UserId=1 

需求说明

需要在SQL Server中基于最后登录时间获取账户相关信息。

实现方案

假设存在存储登录记录的表(例如命名为acc.LoginLogs),该表包含核心字段:UserId(关联用户ID)、LoginTime(登录时间戳)。以下是几种常见场景的实现:

1. 获取所有用户的最后登录信息及账户详情

通过窗口函数ROW_NUMBER()按用户分组,筛选出每个用户的最新登录记录,再关联用户表获取完整信息:

WITH LatestLogin AS (
    SELECT 
        UserId,
        LoginTime,
        ROW_NUMBER() OVER(PARTITION BY UserId ORDER BY LoginTime DESC) AS RowNum
    FROM acc.LoginLogs
)
SELECT 
    s.*,
    ll.LoginTime AS LastLoginTime
FROM acc.Staff s
LEFT JOIN LatestLogin ll ON s.Id = ll.UserId AND ll.RowNum = 1

2. 获取特定用户的最后登录信息

如果只需查询指定用户(比如UserId=1)的最后登录记录,可直接用聚合函数MAX():

SELECT 
    s.*,
    MAX(ll.LoginTime) AS LastLoginTime
FROM acc.Staff s
LEFT JOIN acc.LoginLogs ll ON s.Id = ll.UserId
WHERE s.Id = 1
GROUP BY s.Id, s.FirstName, s.LastName -- 需包含用户表所有非聚合字段

3. 关联现有Monitor表查询

如果需要结合你现有的Monitor表数据,可将上述逻辑整合:

WITH LatestLogin AS (
    SELECT 
        UserId,
        MAX(LoginTime) AS LastLoginTime
    FROM acc.LoginLogs
    GROUP BY UserId
)
SELECT 
    c.*,
    CONCAT(s.FirstName, '', s.LastName) AS FullName,
    ll.LastLoginTime
FROM [dbo].[Monitor] c
LEFT JOIN acc.Staff s ON s.Id = c.UserId
LEFT JOIN LatestLogin ll ON c.UserId = ll.UserId
WHERE c.UserId = 1

注意事项

  • 确保LoginLogs表的LoginTime字段为datetime或datetime2类型,保证时间排序准确性;
  • 若登录日志表数据量较大,建议为UserId和LoginTime建立联合索引,提升查询效率;
  • 若不存在独立的登录日志表,需确认是否有其他表(如Monitor或用户表)存储了登录时间字段,调整上述语句中的表名和字段名即可。

内容的提问来源于stack exchange,提问作者Quyền Nguyễn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 12:05:22