如何按日期时间间隔对数据进行分组?

Jiale Xue - MSFT 34,276 信誉分 Microsoft 供应商
2024-04-11T06:29:32.4066667+00:00

我正在使用 .asp.net core web api + entityframework core 5.0

有一张表:

Id  datetime                                    value
0  2021-07-08 14:46:46.                      1
1  2021-07-08 14:46:47                       5
2  2021-07-08 14:46:48                       2
3  2021-07-08 14:46:49                       4
4  2021-07-08 15:30:01                        7
5  2021-07-08 15:30:46                        4
6  2021-07-08 15:30:46                       4
7  2021-07-08 15:50:04                       4
8  2021-07-08 15:50:05                      6

如何将它们分组为 3 组? 因为日期时间的间隔超过分钟? 14:46:46 至 14:46:49 美国第 1 组 15:30:01 至 15:30:46 是第 2 组 15:50:04 至 15:50:05 是第 3 组x

如何分组?

Note:此问题总结整理于: How to group the data by the datetime intervals?

Entity Framework Core
Entity Framework Core
实体框架数据访问技术的轻量型、可扩展、开源、跨平台版本。
38 个问题
ASP.NET Core
ASP.NET Core
.NET Framework 中一套用于生成 Web 应用程序和 XML Web 服务的技术。
22 个问题
.NET 运行时
.NET 运行时
.NET: 基于 .NET 软件框架的 Microsoft 技术。运行时: 运行未编译为机器语言的应用所需的环境。
38 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 40,786 信誉分 Microsoft 供应商
    2024-04-11T09:38:56.2133333+00:00

    根据您的情况,我有一个建议可以参考。 您可以按分钟分组,这里有一个您可以参考的测试。

    var Counter = new List<CounterData>  
    {  
        new CounterData {Id=0,datetime =new DateTime( 2021,07,08,14,46,46), value = 1 },  
        new CounterData {Id=1,datetime =new DateTime( 2021,07,08,14,46,47), value = 5 },  
        new CounterData {Id=2,datetime =new DateTime( 2021,07,08,14,46,48), value = 2 },  
        new CounterData {Id=3,datetime =new DateTime( 2021,07,08,14,46,49), value = 4 },  
        new CounterData {Id=4,datetime =new DateTime( 2021,07,08,15,30,01), value = 7 },  
        new CounterData {Id=5,datetime =new DateTime( 2021,07,08,15,30,46), value = 4 },  
        new CounterData {Id=6,datetime =new DateTime( 2021,07,08,15,30,46), value = 4 },  
        new CounterData {Id=7,datetime =new DateTime( 2021,07,08,15,50,04), value = 4 },  
        new CounterData {Id=8,datetime =new DateTime( 2021,07,08,15,50,05), value = 6 },  
    };  
      
      
    TimeSpan interval = new TimeSpan(0, 1, 0);  // 1 minutes.  
    var groupedTimes = from dt in Counter                               
                     group dt by dt.datetime.Ticks / interval.Ticks  
                    into g  
                        select new { minute = new DateTime(g.Key * interval.Ticks), Values = g.Count() };  
    foreach (var value in groupedTimes)  
    {  
        Console.WriteLine(value.minute);  
        Console.WriteLine("\t{0}", String.Join(", ", value.Values));  
    }  
    

    结果:

    113227-79.png


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    1 个人认为此答案很有帮助。
    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助