From 8e97d39e95e26eed5be8918b779247d04ae9f964 Mon Sep 17 00:00:00 2001 From: Jason Pickering Date: Mon, 25 May 2026 07:40:23 +0200 Subject: [PATCH] Invert query for getDataYears --- .../table/JdbcAnalyticsTableManager.java | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java b/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java index 6b625a8c4016..44f27c2dacb1 100644 --- a/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java +++ b/dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcAnalyticsTableManager.java @@ -702,20 +702,29 @@ private List getDataYears(AnalyticsTableUpdateParams params) { replaceQualify( sqlBuilder, """ - select distinct(year) \ - from ${datavalue} dv \ - inner join analytics_rs_periodstructure pes on dv.periodid=pes.periodid \ + select distinct(pes.year) \ + from analytics_rs_periodstructure pes \ where pes.startdate is not null \ - and dv.lastupdated < '${startTime}'\s""", - Map.of("startTime", toLongDate(params.getStartTime())))); + """, + Map.of())); if (params.hasFromDate()) { sql.append( replace( - "and pes.startdate >= '${fromDate}'", + "and pes.startdate >= '${fromDate}' ", Map.of("fromDate", DateUtils.toMediumDate(params.getFromDate())))); } + sql.append( + replaceQualify( + sqlBuilder, + """ + and exists (select 1 from ${datavalue} dv \ + where dv.periodid = pes.periodid \ + and dv.lastupdated < '${startTime}')\ + """, + Map.of("startTime", toLongDate(params.getStartTime())))); + return jdbcTemplate.queryForList(sql.toString(), Integer.class); }