En supposant que la table d'audit enregistre également la lease_period colonne de clé primaire, référencée ici lp_id pour plus de simplicité, vous pouvez essayer l'approche suivante :
-
Trouver toutes les lignes où
audit_typeest'Updated'. -
Classez toutes les lignes par
audit_dateet les partitionner parlp_id. -
Classez les lignes par
audit_datepartitionnement parlp_id, suite_id, lease_id, building_id. -
Obtenez la différence entre les deux classements.
-
Classez à nouveau les lignes par
audit_date, en les partitionnant maintenant parlp_id, suite_id, lease_id, building_id, (ranking_difference). -
Sortez toutes les lignes où la dernière valeur de classement est 2 ou plus.
Les quatre premières étapes aboutissent à un ensemble de lignes où chaque groupe de données consécutives (dans l'ordre croissant de audit_date ) lignes avec des valeurs identiques de suite_id, lease_id, building_id pour le même lp_id sera distingué de manière unique par une valeur calculée comme la différence entre les classements #2 et #3.
Au sein du groupe, chaque ligne, à partir de la seconde, ne différera de la précédente que par la valeur de tenant_trading_name , c'est exactement ce dont nous avons besoin. Donc, nous classons à nouveau les lignes, en tenant compte de "l'ID de groupe" que nous venons d'obtenir, puis renvoyons chaque ligne avec le classement de 2 ou plus.
Voici une implémentation approximative :
WITH marked AS (
SELECT
*,
grp = ROW_NUMBER() OVER (PARTITION BY lp_id
ORDER BY audit_date)
- ROW_NUMBER() OVER (PARTITION BY lp_id, suite_id, lease_id, building_id
ORDER BY audit_date)
FROM lease_period_audit
WHERE audit_type = 'Updated'
),
ranked AS (
SELECT
*,
rnk = ROW_NUMBER() OVER (PARTITION BY lp_id, suite_id, lease_id, building_id, grp
ORDER BY audit_date)
FROM marked
)
SELECT
audit_date,
lp_id,
tenant_trading_name,
suite_id,
lease_id,
building_id
FROM ranked
WHERE rnk = 2
Noter. Cela suppose que la table d'audit n'enregistre que les modifications réelles, c'est-à-dire qu'il ne peut pas y avoir deux lignes consécutives avec la même clé primaire où les quatre colonnes ont des valeurs identiques.