当前年份与上一年度之间的Birt报告和日期参数

时间:2016-03-28 06:53:53

标签: oracle date birt

我正在使用stackoverflow的一位老乡向我建议的以下查询。以下查询使用日期以带来当前年度(> 2016年,< 2017年)和上一年度(> 2015年,< 2016年)。我想在Birt报告中使用它 - 特别提示用户选择日期(默认情况下将选择当前日期)并自动查询将减去一年以计算当前年份的结果和上一年的结果。 Here's the code given to me

SELECT grade,
       COUNT( DISTINCT CASE WHEN DATE '2015-01-01' >= date_column
                             AND date_column < DATE '2016-01-01'
                            THEN customer_id END
            ) AS number_of_unique_customers_in_2015,
       COUNT( DISTINCT CASE WHEN DATE '2016-01-01' >= date_column
                             AND date_column < DATE '2017-01-01'
                            THEN customer_id END
            ) AS number_of_unique_customers_in_2016
FROM   Customers
WHERE  Date_Column >= DATE '2015-01-01'
AND    Date_Column <  DATE '2017-01-01'
GROUP BY grade;

有人可以在birt报告中建议如何做到这一点吗?

1 个答案:

答案 0 :(得分:1)

查看my answer here以了解如何在Birt中向SQL查询添加参数。您应该添加报告参数以首先从用户输入日期。

要从输入参数中减去一年,您应该在SQL查询中使用DATEADD一个负值,并在其中添加参数。

对于输入参数日期2016-01-01,您的查询应如下所示:

SELECT grade,
       COUNT( DISTINCT CASE WHEN DATEADD(year, -1, ?) >= date_column
                             AND date_column < ?
                            THEN customer_id END
            ) AS number_of_unique_customers_in_last_year,
       COUNT( DISTINCT CASE WHEN ? >= date_column
                             AND date_column < DATEADD(year, 1, ?)
                            THEN customer_id END
            ) AS number_of_unique_customers_in_current_year
FROM   Customers
WHERE  Date_Column >= DATEADD(year, -1, ?)
AND    Date_Column <  DATEADD(year, 1, ?)
GROUP BY grade;