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_type
est'Updated'
. -
Classez toutes les lignes par
audit_date
et les partitionner parlp_id
. -
Classez les lignes par
audit_date
partitionnement 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.