Jasper reports 根据iReport中的变量对结果集进行排序

Jasper reports 根据iReport中的变量对结果集进行排序,jasper-reports,ireport,Jasper Reports,Ireport,我有一个包含列的结果集: interval_start(timestamp) , camp , queue , other columns 2012-09-10 11:10 c1 q1 2012-09-10 11:20 c1 q2 间隔\u start在10分钟间隔内具有如下值: 2012-09-10 11:10, 2012-09-10 11:20, 2012-09-10 11:30 .... 使用Joda时间库和inte

我有一个包含列的结果集:

interval_start(timestamp) , camp  , queue , other columns
2012-09-10 11:10            c1      q1
2012-09-10 11:20            c1      q2
间隔\u start在10分钟间隔内具有如下值:

2012-09-10 11:10,

2012-09-10 11:20,

2012-09-10 11:30 ....
使用Joda时间库和interval\u start字段,我创建了一个变量来创建字符串,如果interval\u start的分钟数在00-30之间,则以分钟为单位设置30,否则以分钟为单位设置00

我想将数据分组为:

camp as group1
variable created as group2
queue as group3
做了一些汇总

但在我的报告结果中,我在相同的时间间隔内多次收到相同的队列。
我使用了
按营地排序、间隔开始、队列
,但问题仍然存在

附上屏幕截图供您参考:


有没有办法根据创建的变量对结果集进行排序?

最佳猜测可能是实际SQL查询的问题。你说同一个队列正在重复,但从你的图像看,它实际上不是重复的,而是一个不同的行

您的查询将很难实现,因为您确实希望您的查询有一个排序依据,即按营地排序(四舍五入)间隔\u开始,排队。如果没有这一点,则按
camp
列排序,然后按
interval\u start
的非舍入版本排序,然后按
camp
排序。When表示数据顺序不正确,Jasper Reports无法按您想要的方式对其进行分组。而真正的问题是Jasper Reports没有在获得数据后对其进行排序的功能。这是由开发商提供的

因此,您有两个选择:

  • 更新SQL查询以进行时间舍入。根据数据库的不同,这是以不同的方式完成的,但可能需要某种类型的存储过程或函数来处理它(例如,请参见此)
  • 不要让sql查询出现在报表中,而是将其移到报表之外,然后处理数据,在java端进行取整和排序。然后将其作为
    REPORT\u数据源
    参数传递
  • 向表中添加一列以存储舍入时间。您可以在数据库中创建一个触发器来处理这一切,而无需更改应用程序中的任何其他代码 老实说,这两种选择都不理想,我希望有人能提供一个证明我错了的答案。但我认为目前没有更好的办法