0

我有一个带有列的结果集:

interval_start(timestamp) , camp  , queue , other columns
2012-09-10 11:10            c1      q1
2012-09-10 11:20            c1      q2

interval_start具有 10 分钟间隔内的值,例如:

2012-09-10 11:10,

2012-09-10 11:20,

2012-09-10 11:30 ....

使用Joda Time库和interval_start字段,我创建了一个变量来创建字符串,这样如果interval_start的分钟位于 00-30 之间,则以分钟为单位设置 30,否则以分钟为单位设置 00。

我想将数据分组为:

camp as group1
variable created as group2
queue as group3

并做了一些聚合

但在我的报告结果中,我在相同的时间间隔内多次获得相同的队列。
我用过order by camp, interval_start, queue,但问题依然存在。

附上截图供您参考:

在此处输入图像描述

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

4

1 回答 1

0

最好的猜测是您的实际 SQL 查询存在问题。您说正在重复相同的队列,但是从查看您的图像来看,实际上并没有重复它是不同的行。

您的查询将很难完成,因为您真的希望您的查询有一个 order by of order by camp, (rounded)interval_start, queue。没有它,它是按列排序,然后camp是非四舍五入的版本。何时表示数据的顺序不正确,Jasper Reports 无法按照您想要的方式对它们进行分组。然后真正的问题是 Jasper Reports 没有在获得数据后对数据进行排序的功能。由开发商来提供。interval_startcamp

所以你有几个选择:

  1. 更新您的 SQL 查询以对您的时间进行四舍五入。根据您的数据库,这以不同的方式完成,但可能需要某种类型的存储过程或函数来处理它(例如,参见这个TSQL 函数)。
  2. 而不是在报表中使用 sql 查询,将其移到报表之外,并处理数据,在 java 端进行舍入和排序。然后将其作为REPORT_DATASOURCE参数传递。
  3. 在表中添加一列以存储四舍五入的时间。您可以在数据库中创建一个触发器来处理这一切,而无需更改应用程序中的任何其他代码。

老实说,这两种选择都不理想,我希望有人能提供一个证明我错的答案。但我认为目前没有更好的方法。

于 2012-10-12T19:26:58.707 回答