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

匿名
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?

开发人员技术 | .NET | Entity Framework Core
开发人员技术 | ASP.NET | ASP.NET Core
开发人员技术 | .NET | .NET 运行时
0 个注释 无注释
{count} 票

接受的答案
  1. Hui Liu-MSFT 48,681 信誉分 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 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。