Я создаю JasperReport с помощью iReport, поэтому я ограничен* одним SQL-запросом.
У меня есть таблица «статистика» со столбцами «имя» (VARCHAR), «количество» (INTEGER) и «дата-время» (DATETIME).
Достаточно просто получить сумму столбца «количество», когда «имя» было «тестовым» за последний день, а также за последнюю неделю и месяц (см. ниже).
Рабочий оператор SQL:
SELECT
SUM(count)as 'today'
FROM
statistics
WHERE
name = "test"
AND $P{oneDayAgo} <= datetime
AND datetime <= $P{now}
- Однако, поскольку у меня есть только один оператор SQL для работы, мне нужно как-то их комбинировать. Я пытался использовать UNION (как показано ниже), но это не сработало.
Неудачная инструкция SQL:
SELECT
SUM(count)as 'today'
FROM
statistics
WHERE
name = "test"
AND $P{oneDayAgo} <= datetime
AND datetime <= $P{now}
UNION
SELECT
SUM(count)as 'thisWeek'
FROM
statistics
WHERE
name = "test"
AND $P{oneWeekAgo} <= datetime
AND datetime <= $P{now}
UNION
SELECT
SUM(count)as 'thisMonth'
FROM
statistics
WHERE
name = "test"
AND $P{oneMonthAgo} <= datetime
AND datetime <= $P{now}
(*) можно добавлять дополнительные запросы только для графиков или кросс-таблиц, ни один из которых не подходит для моей цели.