0

我已经使用 Crystal Reports 几年了,但直到现在我一直避免使用“添加命令”。

我有一份生成订单确认的报告。我想安排在特定时间间隔打印确认信息,但为了做到这一点,我需要最后一次修改订单的日期/时间。该信息可以在审计表中找到,但是,审计表可以包含同一订单的多个副本,具体取决于它被修改的次数。我不能直接加入这个审计表,因为它在我的订单确认中创建了重复的行,虽然我可以从子报告中的审计表中收集所需的信息,但我无法过滤我的主报告关于这些结果。

我想拿审计表,只带入每个订单的最新记录,以便我可以过滤编辑日期和时间。

任何人都可以帮助撰写此声明吗?

这是我到目前为止所拥有的:

SELECT "OEP40A"."ORDN40", "OEP40A"."ADAT40", "OEP40A"."ATIM40", "OEP40A"."APRG40", "OEP40A"."ARCT40"
 FROM   "S103EC55"."OSLD1F3"."OEP40A" "OEP40A"
 WHERE  "OEP40A"."ARCT40"='2' AND "OEP40A"."APRG40"='OE340'
 ORDER BY "OEP40A"."ORDN40", "OEP40A"."ADAT40" DESC, "OEP40A"."ATIM40" DESC

订货号为 OEP40A.ORDN40。我遇到的问题之一是日期(OEP40A.ADAT40)和时间(OEP40A.ATIM40)是单独的字段。当这些字段分开时,如何选择具有最大日期和时间的记录?上面的陈述是否会通过始终先按日期排序然后按时间排序来实现?

编辑添加:

我的服务器是运行 V5R4 的 IBM iSeries。这是我想出的解决方案,以防其他人需要它。

SELECT ROW_NUMBER() over (osld1f3.oep40a.ordn40 分区 order by osld1f3.oep40a.adat40, osld1f3.oep40a.atim40 desc) as COUNT, osld1f3.oep40a.cono40, osld1f3.oep40a.adat40, osld1f3.oep40a.ordn .oep40a.atim40

来自 osld1f3.oep40a

WHERE osld1f3.oep40a.arct40=2 和 osld1f3.oep40a.aprg40='OE340' 和 osld1f3.oep40a.actf40<>'X'

4

2 回答 2

0
  1. 为了获得最大的帮助机会,您应该为有问题的表提供创建表脚本。

  2. 顺便说一句,由于您使用的是命令方法,因此请先让您的查询在目标数据库(Oracle、SQL Server)中完美运行,然后再在 Crystal 中运行命令(如果可以的话)。这种方式更容易调试。

  3. 关于获取最新记录,如果您的表使用顺序主键,您可以使用这样的子查询:

select z.claim_id, z.ASSIGN_ID from (select c.claim_id , (select max(key_id) from audit_table ca where ca.fk_Id = c.fk_id) ASSIGN_ID from primary_table c) Z

于 2015-01-15T19:47:15.443 回答
0

据我所知,通过查看您的问题,您无需编写命令即可获得所需的结果。

尝试以下过程:

  1. 首先创建一个datetimefromDateTimeusing DateTimeValue (date, time)。检查下面的链接

http://www-01.ibm.com/support/knowledgecenter/SS4JCV_7.5.5/com.businessobjects.integration.eclipse.designer.doc/html/topic664.html

  1. 现在创建一个带有订单号的组,并将创建的Datetime值放在详细信息中。

这样,您就可以在该订单组的详细信息中获得不同的日期时间记录。

  1. 通过右键单击日期时间字段来抑制详细信息并获取最大的日期时间,这将为您提供最近发生的情况。

  2. 在做所有这些事情之前,使用数据库专家中的订单号链接表。

于 2015-01-16T07:59:45.663 回答