如何使用DateDiff()通过分组而不仅仅是整个数据集给我一个区别?

时间:2015-01-30 16:15:38

标签: crystal-reports global-variables

我的数据按提供者分组,然后由patientID分组,我想找到患者最后一次与诊所“互动”,但是当我使用datediff时,它似乎使用了整个数据集的最新日期而不是按组。

我的尝试如下:

@TimeSinceLastInteraction_Initialize

global numbervar interaction := 0; 
if {Ticket.PatientID} <> previous({Ticket.PatientID}) then interaction
else interaction :=0;

此公式放在patientID的组标题中,以便重置每个组的值并且似乎正在运行

@TimeSinceLastInteraction

global numbervar interaction;
interaction := DateDiff("d",maximum({Ticket.TicketDate}),CurrentDateTime);

我已经尝试了几个不同的日期字段但是我总是得到相同的,不希望的结果,其中为每个分组返回的值是相同的。这让我觉得我没有正确地将交互设置为变量。我也试过本地vs全局变量无济于事。

作为一个小小的注释,我并不真正理解本地变量声明和全局变量声明之间的区别(我通常只使用全局变量)并希望对它们各自的用途有所解释,就像我的任何帮助一样。目前的问题!

提前致谢!

1 个答案:

答案 0 :(得分:4)

首先,局部变量只能在声明它的一个公式中使用。您不能在其公式之外的任何地方引用它。任何公式都可以引用全局变量(子报表中的公式除外)。

在您的情况下,您根本不需要使用任何变量,您只需要一个公式来完成工作:

DateDiff("d",maximum({Ticket.TicketDate},{Ticket.PatientID}),CurrentDateTime)

键是您传递给Maximum()函数的第二个参数;它指定您只查找该特定PatientID的最大日期。没有第二个参数,它将为您提供整个报告的最大日期。但是,您应该注意,作为第二个参数传递的值必须是您在报告中用作组的字段。