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

如何基于LoginDate字段筛选获取最近三周内未登录的用户?

解决方法

核心逻辑:你需要先按用户维度聚合所有登录记录,取每个用户的最近一次登录时间,再判断该时间是否早于三周前,即可筛选出符合要求的用户。

修正后代码

var threeWeeksAgo = DateTime.Now.Date.AddDays(-21);
var noLoginUsers = lowUsers.UserLogins
    // 关联客户表获取用户维度信息
    .Join(lowUsers.Clients, 
        ul => ul.client, 
        c => c.companyName, 
        (ul, c) => new { ClientId = c.clientID, LoginDate = ul.dateTimeCreated, CompanyName = c.companyName })
    // 按用户唯一标识分组,这里用ClientId+CompanyName,可根据实际业务调整分组键
    .GroupBy(a => new { a.ClientId, a.CompanyName })
    // 取每个用户的最近一次登录时间
    .Select(g => new { 
        g.Key.ClientId, 
        g.Key.CompanyName, 
        LastLoginDate = g.Max(x => x.LoginDate) 
    })
    // 筛选最近一次登录早于三周前的用户
    .Where(u => u.LastLoginDate <= threeWeeksAgo)
    .ToList();

逻辑说明

  • 分组是核心步骤:通过GroupBy将同一个用户的所有登录记录聚合为一组,调用Max方法取该组最大的LoginDate,也就是用户最近一次的登录时间
  • 仅当用户的最近一次登录时间都早于三周前,才说明该用户近三周完全没有登录行为

以你提供的测试数据为例,假设当前日期为2021-10-05,三周前为2021-09-14:

  • User1的最近登录时间为2021-10-04,晚于2021-09-14,不会被筛选
  • User2的最近登录时间为2021-09-03,早于2021-09-14,会被纳入结果,符合需求

注意事项

  • 如果需要包含从未有过登录记录的用户,需要调整关联逻辑:先从Clients表取全量客户,再左关联登录日志,对左关联后LoginDate为null的用户也纳入结果即可
  • 建议统一使用UTC时间计算,避免服务器时区和业务时区不一致导致的统计误差

内容的提问来源于stack exchange,提问作者Mohamed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:45:02