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、年和月的每个组合找到最大创建日期,并且只包括日期与该日期匹配的行。
我无法构建查询,请查看我的示例架构
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、年和月的每个组合找到最大创建日期,并且只包括日期与该日期匹配的行。