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

如何筛选多类型间的最大公共日期?SQL与LINQ实现对比咨询

找出所有类型间的最大公共日期:SQL vs LINQ

先直接说结论:如果数据存在数据库里,用SQL实现更简便高效——毕竟数据库天生擅长这类聚合统计;如果数据已经加载到.NET应用的内存集合里,LINQ会更贴合你的代码上下文,不用额外写SQL语句。

先看你给出的示例数据:

TypeDate
12018-03-01
12018-02-01
12018-01-01
22018-02-01
22018-05-01
22018-01-01
32018-01-01
32018-03-01
32018-02-01

目标是找到所有Type都存在的最大日期,这里结果是2018-02-01。

SQL实现思路与代码

核心思路:先统计总共有多少种不同的Type,然后找出每个日期对应的不同Type数量,筛选出数量等于总Type数的日期,再取最大的那个。如果没有这样的日期,结果会是空。

-- 先统计总Type数,再筛选符合条件的最大日期
WITH TotalTypes AS (
    SELECT COUNT(DISTINCT Type) AS Count
    FROM YourTableName
)
SELECT MAX(Date) AS MaxCommonDate
FROM YourTableName
GROUP BY Date
HAVING COUNT(DISTINCT Type) = (SELECT Count FROM TotalTypes)

如果没有公共日期,这个查询会返回NULL,完全符合需求。

LINQ实现思路与代码

假设你已经把数据加载到了一个List<YourDataModel>里,模型定义大概是:

public class YourDataModel
{
    public int Type { get; set; }
    public DateTime Date { get; set; }
}

LINQ的思路和SQL一致:先算总Type数,然后按Date分组,统计每组的不同Type数量,筛选出匹配总Type数的组,最后取最大的Date。

var data = new List<YourDataModel>
{
    // 填充示例数据
    new YourDataModel { Type = 1, Date = DateTime.Parse("2018-03-01") },
    new YourDataModel { Type = 1, Date = DateTime.Parse("2018-02-01") },
    new YourDataModel { Type = 1, Date = DateTime.Parse("2018-01-01") },
    new YourDataModel { Type = 2, Date = DateTime.Parse("2018-02-01") },
    new YourDataModel { Type = 2, Date = DateTime.Parse("2018-05-01") },
    new YourDataModel { Type = 2, Date = DateTime.Parse("2018-01-01") },
    new YourDataModel { Type = 3, Date = DateTime.Parse("2018-01-01") },
    new YourDataModel { Type = 3, Date = DateTime.Parse("2018-03-01") },
    new YourDataModel { Type = 3, Date = DateTime.Parse("2018-02-01") }
};

int totalTypes = data.Select(x => x.Type).Distinct().Count();

// 处理无公共日期时返回null的情况
var maxCommonDate = data
    .GroupBy(x => x.Date)
    .Where(g => g.Select(x => x.Type).Distinct().Count() == totalTypes)
    .Select(g => (DateTime?)g.Key)
    .DefaultIfEmpty()
    .Max();

// 输出结果:2018-02-01 00:00:00(无公共日期时输出null)
Console.WriteLine(maxCommonDate);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:46:39