2016-06-18 3 views
0

Я застрял построения запроса, посмотрите на мой образец схемыCognos - только выбрать одну запись в месяц из записей

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 

Теперь, если мы присоединяемся к ПК с ФК мы получим

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 

Теперь я знаю, что могу использовать ранг(), чтобы получить последние п записей позволяет сказать, последние 3 записей в KRI_ID как ниже

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 

Но я не ж ant просто мне нужны последние n записей, но мне нужно только выбрать одну запись в месяц. Как ниже

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 

В приведенном выше примере я выбираю только самую последнюю запись с 2016-02-01. Как это сделать в IBM Cognos Report Studio.

ответ

1

Я считаю, что вы можете сделать это с помощью фильтра и использовать функцию aggregate().

Я продемонстрирую с упрощенным например:

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, год и месяц и включать только строки, в которых дата совпадает с датой.

+0

Да, это может работать и является динамическим подходом, так как я мог ждать, я разбил запрос на 4 для каждого месяца, мое число месяцев фиксировано, затем получил максимальный размер для каждого месяца, а затем применил объединение по результатам. – Moon