Supponendo che la tabella di controllo registri anche il lease_period colonna della chiave primaria, a cui si fa riferimento qui lp_id per semplicità, potresti provare il seguente approccio:
-
Trova tutte le righe in cui
audit_typeè'Updated'. -
Classifica tutte le righe per
audit_datee partizionarli perlp_id. -
Classifica le righe per
audit_datepartizionamento perlp_id, suite_id, lease_id, building_id. -
Ottieni la differenza tra le due classifiche.
-
Classifica nuovamente le righe in base a
audit_date, partizionandoli ora perlp_id, suite_id, lease_id, building_id, (ranking_difference). -
Genera tutte le righe in cui l'ultimo valore di classifica è 2 o superiore.
I primi quattro passaggi danno come risultato un insieme di righe in cui ogni gruppo di consecutivi (in ordine crescente di audit_date ) righe con valori identici di suite_id, lease_id, building_id per lo stesso lp_id sarà contraddistinto in modo univoco da un valore calcolato come differenza tra le classifiche n. 2 e n. 3.
All'interno del gruppo, ogni riga, a partire dalla seconda, differirà dalla precedente solo per il valore di tenant_trading_name , che è proprio ciò di cui abbiamo bisogno. Quindi, classifichiamo nuovamente le righe, tenendo conto dell'"ID gruppo" che abbiamo appena ottenuto, quindi restituiamo ogni riga con la classifica di 2 o superiore.
Ecco un'implementazione approssimativa:
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
Nota. Ciò presuppone che la tabella di controllo registri solo le modifiche reali, ovvero non possono esserci due righe consecutive con la stessa chiave primaria in cui tutte e quattro le colonne hanno valori identici.