数据按日期周期的分组聚合

数据按日期周期的分组聚合

废话不多说直接上代码

        /// <summary>
        /// 将数据按照周期聚合转化(多点)
        /// </summary>
        /// <param name="statsHistoryDTOs"></param>
        /// <param name="ymdTypeEnum"></param>
        /// <returns></returns>
        [NonAction]
        public List<StatsHistoryDTO> TransStatsHistoryBaseDataByCycleBatch(List<StatsHistoryDTO> statsHistoryDTOs, YmdTypeEnum ymdTypeEnum)
        {
            var returnInfo = new List<StatsHistoryDTO>();

            var pointGroups= statsHistoryDTOs.GroupBy(a=>a.Pn).ToList();
            foreach (var pointGroup in pointGroups)
            {
                List<IGrouping<string, StatsHistoryDTO>> groups = null;
                switch (ymdTypeEnum)
                {
                    case YmdTypeEnum.Y:
                        groups = pointGroup.GroupBy(a => a.Pt.ToString("yyyy-01-01 00:00:00")).ToList();
                        break;
                    case YmdTypeEnum.M:
                        groups = pointGroup.GroupBy(a => a.Pt.ToString("yyyy-MM-01 00:00:00")).ToList();
                        break;
                    case YmdTypeEnum.W:
                        groups = pointGroup.GroupBy(a => a.Pt.Date.AddDays(1 - ((int)a.Pt.DayOfWeek == 0 ? 7 : (int)a.Pt.DayOfWeek)).ToString("yyyy-MM-dd 00:00:00")).ToList(); 
                        break;
                    case YmdTypeEnum.D:
                        groups = pointGroup.GroupBy(a => a.Pt.ToString("yyyy-MM-dd 00:00:00")).ToList();
                        break;
                    case YmdTypeEnum.H:
                        groups = pointGroup.GroupBy(a => a.Pt.ToString("yyyy-MM-dd HH:00:00")).ToList();
                        break;
                }
                if (groups != null && groups.Count > 0)
                {
                    returnInfo.AddRange(
                        groups.Select(a => new StatsHistoryDTO()
                        {
                            Pn = pointGroup.Key,
                            Pt = DateTime.Parse(a.Key),
                            Co2 = a.Select(a => a.Co2).Sum(),
                            Coal = a.Select(a => a.Coal).Sum(),
                            Money = a.Select(a => a.Money).Sum(),
                            Pv = a.Select(a => a.Pv).Sum()
                        }).ToList()
                        );
                }
            }
            return returnInfo;
        }

mark一下

相关推荐

  1. 数据日期周期分组聚合

    2024-03-30 12:06:01       22 阅读
  2. 数据分析 — Pandas 分组聚合

    2024-03-30 12:06:01       29 阅读
  3. Hive增强聚合、多维数据集、分组和汇总

    2024-03-30 12:06:01       38 阅读
  4. python elasticsearch 日期聚合

    2024-03-30 12:06:01       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-30 12:06:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-30 12:06:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-30 12:06:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-30 12:06:01       20 阅读

热门阅读

  1. 设计模式(6):桥接模式

    2024-03-30 12:06:01       18 阅读
  2. 常用设计模式

    2024-03-30 12:06:01       17 阅读
  3. Flume和Kafka的区别

    2024-03-30 12:06:01       16 阅读
  4. c语音函数大全(W开头)

    2024-03-30 12:06:01       17 阅读
  5. ORACLE 存中文

    2024-03-30 12:06:01       17 阅读
  6. LeetCode 345. 反转字符串中的元音字母

    2024-03-30 12:06:01       18 阅读
  7. CentOS 7.9上创建Redis用户和组

    2024-03-30 12:06:01       19 阅读
  8. MySQL的索引

    2024-03-30 12:06:01       16 阅读
  9. Redis中Hash数据结构的底层实现

    2024-03-30 12:06:01       20 阅读
  10. RISC-V单板计算机模拟和FPGA板多核IP实现

    2024-03-30 12:06:01       18 阅读
  11. axios详解

    2024-03-30 12:06:01       16 阅读