С базой данных Oracle вы можете легко добиться этого с помощью чистого SQL, используя «Аналитическую функцию» LAG
(подробности см. В документации Oracle).
Независимо от БД, с BIRT вы можете использовать переменную last_row:
Создайте несколько вычисляемых столбцов, чтобы сохранить результаты ваших сравнений. например "FIRST_COLUMN_CHANGED" как логическое значение.
Событие afterOpen:
last_row = null;
Событие onFetch (обратите внимание, я не уверен, что столбцы фактических данных начинаются с 0 или 1):
if (last_row != null) {
if (last_row[0] == row[0]) {
row["FIRST_COLUMN_CHANGED"] = false;
} else {
row["FIRST_COLUMN_CHANGED"] = true;
}
} else {
// do computations for the first record.
row["FIRST_COLUMN_CHANGED"] = true;
}
// Copy the current row to last_row
last_row = {};
// modify depending on the number of columns
for (var i=0; i<10; i++) {
last_row[i] = row[i];
}