我正在使用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报告中建议如何做到这一点吗?
答案 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;