• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

java - hibernate 时间间隔分组

[复制链接]
菜鸟教程小白 发表于 2022-10-23 05:23:44 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有一张表,其中的时间戳记字段为datetime类型。我需要将定义的开始时间和结束时间之间的数据聚合为代表相等长度的时间间隔的x组,其中x作为函数参数提供。

用Hibernate做到这一点的最佳方法是什么?

编辑:一些解释

mysql表:

data_ts: datetime pk
value1 : int
value2 : bigint
...

实体类:
Calendar dataTs;
Integer value1;
BigDecimal value2;
...

我正在寻找一个类似的HQL查询
select max(c.value1), avg(c.value2) from MyClass c 
  where c.dataTs between :start and :end group by <interval>

整个时间段分为x个大小相等的时间间隔。

例子:
Start : 2008-10-01 00:00:00   
End   : 2008-10-03 00:00:00 (2 days)
Groups: 32

需要按1.5小时(48小时/32)的时间间隔进行分组:
2008-10-01 00:00:00 - 2008-10-01 01:29:59
2008-10-01 01:30:00 - 2008-10-01 02:59:59
2008-10-01 02:00:00 - 2008-10-01 04:29:59
...



Best Answer-推荐答案


我试图解决同样的问题。我必须在一天之内按2小时间隔对数据进行分组。实际上,不应以这种方式使用“纯” Hibernate。因此,我在Hibernate的条件中添加了 native SQL投影。对于您的情况,它可能看起来像这样(我正在使用MySQL语法和函数):

int hours = 2; // 2-hours interval

Criteria criteria = session.createCriteria( MyClass.class )
            .add( Restrictions.ge( "dataTs", start ) )
            .add( Restrictions.le( "dataTs", end ) );


ProjectionList projList = Projections.projectionList();
        projList.add( Projections.max( "value1" ) );
        projList.add( Projections.avg( "value2" ) );
        projList.add( Projections.sqlGroupProjection(
            String.format( "DATE_ADD( DATE( %s_.dataTs ), INTERVAL( HOUR( %s_.dataTs ) - HOUR( %s_.dataTs) %% %d ) HOUR) as hourly", criteria.getAlias(), criteria.getAlias(), criteria.getAlias(), hours ),
            String.format( "DATE_ADD( DATE( %s_.dataTs ), INTERVAL( HOUR( %s_.dataTs) - HOUR( %s_.dataTs ) %% %d ) HOUR)", criteria.getAlias(), criteria.getAlias(), criteria.getAlias(), hours ),
            new String[]{ "hourly" },
            new Type[]{ Hibernate.TIMESTAMP } )
        );
        criteria.setProjection( projList );

List results = criteria
            .setCacheable( false )
            .list();

该代码看起来有些丑陋,但可以解决问题。希望总体思路对您有所帮助。

关于java - hibernate 时间间隔分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/321687/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap