Cognos - 每月只从记录中挑选一条记录

Cognos - Only pick one record per month from the records

我无法构建查询,请查看我的示例架构

Table Name: KRIs
KRI_ID  KRI_Name
------  --------
K1      KNM
K2      KNM2

Table Name: KRIValues
KRIVal_ID  KRIVal_Name  KRI_Value_Date KRIVal_Create_Date   KRI_ID 
---------  -----------  -------------- -------------------  -------
KV1        KVNM1        2016-01-01     2016-01-01 06:01:02  K1
KV2        KVNM2        2016-02-01     2016-02-01 05:12:13  K1
KV3        KVNM3        2016-02-01     2016-02-01 05:20:20  K1
KV4        KVNM4        2016-03-01     2016-03-01 05:10:31  K1
KV5        KVNM5        2016-01-01     2016-01-01 10:09:12  K2

现在如果我们用FK加入PK我们会得到

KRIVal_ID  KRIVal_Name  KRI_Value_Date KRIVal_Create_Date   KRI_ID   KRI_Name 
---------  -----------  -------------- -------------------  -------  --------
KV1        KVNM1        2016-01-01     2016-01-01 06:01:02  K1       KNM
KV2        KVNM2        2016-02-01     2016-02-01 05:12:13  K1       KNM
KV3        KVNM3        2016-02-01     2016-02-01 05:20:20  K1       KNM
KV4        KVNM4        2016-03-01     2016-03-01 05:10:31  K1       KNM
KV5        KVNM5        2016-01-01     2016-01-01 10:09:12  K2       KNM2

现在我知道我可以使用 rank() 来获取最新的 n 条记录让我们说每个 KRI_ID 的最后 3 条记录,如下所示

KRIVal_ID  KRIVal_Name  KRI_Value_Date KRIVal_Create_Date   KRI_ID   KRI_Name 
---------  -----------  -------------- -------------------  -------  --------
KV1        KVNM1        2016-01-01     2016-01-01 06:01:02  K1       KNM
KV2        KVNM2        2016-02-01     2016-02-01 05:12:13  K1       KNM
KV3        KVNM3        2016-02-01     2016-02-01 05:20:20  K1       KNM
KV5        KVNM5        2016-01-01     2016-01-01 10:09:12  K2       KNM2

但我不想要这个,我确实需要最后 n 条记录,但我每月只需要 select 一条记录。喜欢下面

KRIVal_ID  KRIVal_Name  KRI_Value_Date KRIVal_Create_Date   KRI_ID   KRI_Name 
---------  -----------  -------------- -------------------  -------  --------
KV1        KVNM1        2016-01-01     2016-01-01 06:01:02  K1       KNM
KV3        KVNM3        2016-02-01     2016-02-01 05:20:20  K1       KNM
KV4        KVNM4        2016-03-01     2016-03-01 05:10:31  K1       KNM
KV5        KVNM5        2016-01-01     2016-01-01 10:09:12  K2       KNM2

上面我只select 2016-02-01的最新记录。我如何在 IBM Cognos Report Studio 中执行此操作。

我相信您可以使用过滤器并使用 maximum() 聚合函数来做到这一点。

我将用一个简单的例子来演示:

KRI_Value_Date | KRIVal_Create_Date | KRI_ID
2016-01-01 | 2016-01-01 06:01:02 | K1 
2016-02-01 | 2016-02-01 05:12:13 | K1
2016-02-01 | 2016-02-01 05:20:20 | K1
2016-01-01 | 2016-01-01 10:09:12 | K2

您可以按如下方式添加过滤器:

[KRIVal_Create_Date] = maximum([KRIVal_Create_Date] for [KRI_ID],extract(year,[KRIVal_Create_Date]),extract(month,[KRIVal_Create_Date]))

我们为 ID、年和月的每个组合找到最大创建日期,并且只包括日期与该日期匹配的行。