我有一些这样的记录:
Datetime | Type |
2012-02-23 22:00:11 1
2012-02-23 22:02:14 2
2012-02-23 22:03:56 1
2012-02-23 22:04:11 1
2012-02-23 22:33:21 2
....
我将生成一个显示以下内容的列表:
日期时间字段 并且,如果Type = 2,则为Last type 1和实际Type2 Record之间的时差。 格式化为HH:MM:SS
以上提及的数据示例:
Datetime | Type | Diff
2012-02-23 22:00:11 1
2012-02-23 22:02:14 2 00:02:03 (Diff to 22:00:11)
2012-02-23 22:03:56 1
2012-02-23 22:04:11 1
2012-02-23 22:33:21 2 00:29:25 (Diff to 22:03:56)
我尝试以不同的方式使用变量。
但是,正如最近经常发生的那样,不成功: - )
(我是iRefg iReport 4.5.0)
有什么想法吗?
基督徒
答案 0 :(得分:1)
尝试将其放入变量表达式(位于变量的属性中)
$ F {日期时间} .equals($ F {}型.equals(2)) - $ F {日期时间} .equals($ F {}型.equals(1))
答案 1 :(得分:1)
首先,创建一个变量$ V {Diff},计算所有行的$ F {Datetime}之间的差异。这为您提供了您想要的值(以及您不需要的一堆)。
其次,当$ F {Type}等于2时,仅显示$ V {Diff}。
但它的细节让它变得有趣。这个变量在JasperReports中并不完全明显。实际上你需要两个变量,它们必须按正确的顺序定义。
$V{Diff} Expression: $F{adate}.getTime() - $V{LastType1Date}
$V{LastType1Date} Expresion: ($F{type}.intValue() == 1) ? $F{adate}.getTime() : $V{LastType1Date}
然后表达式很容易打印:$F{type}.intValue() == 2
你得到你需要的东西:
我忽略了间隔格式,但我认为这可以解决您的关键问题。您只需要将毫秒转换为您想要的格式。
答案 2 :(得分:0)
创建一个名为lastType1DateTime的Date变量,并为变量表达式put:
创建($F{Type} == 1) ? $F{DateTime} : $V{lastType1DateTime}
此变量将始终保留最后一个类型1日期。然后只需在详细信息字段中对类型2行进行差异。