我的数据按提供者分组,然后按患者 ID 分组,我想找到患者最后一次与诊所“互动”的时间,但是当我使用 datediff 时,它似乎给出了整个数据集的最新日期,而不是按组。
我的尝试如下:
@TimeSinceLastInteraction_Initialize
global numbervar interaction := 0;
if {Ticket.PatientID} <> previous({Ticket.PatientID}) then interaction
else interaction :=0;
此公式放置在患者 ID 的组标题中,以重置每个组的值,并且似乎有效
@TimeSinceLastInteraction
global numbervar interaction;
interaction := DateDiff("d",maximum({Ticket.TicketDate}),CurrentDateTime);
我尝试了几个不同的日期字段,但我总是得到相同的、不需要的结果,其中每个分组返回的值是相同的。这让我觉得我没有正确地将交互设置为变量。我也试过局部变量 vs 全局变量无济于事。
顺便说一句,我不太明白局部变量声明和全局变量声明之间的区别(我通常只使用全局变量),并且希望对它们各自的用途进行解释,就像对我当前问题的任何帮助一样!
提前致谢!
最佳答案
首先,局部变量只能在声明它的一个公式中使用。您不能在其公式之外的任何地方引用它。任何公式都可以引用全局变量(子报表中的公式除外)。
在您的情况下,您根本不需要使用任何变量,您实际上只需要一个公式即可完成工作:DateDiff("d",maximum({Ticket.TicketDate},{Ticket.PatientID}),CurrentDateTime)
关键是您传递给 Maximum()
的第二个参数功能;它指定您只查找该特定 PatientID 的最大日期。如果没有第二个参数,它将为您提供整个报告的最大日期。但是,您应该注意,作为第二个参数传递的值必须是您在报表中用作组的字段。
关于crystal-reports - 我如何使用 DateDiff() 通过分组而不只是整个数据集来给我一个差异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28240092/