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_date
e partizionarli perlp_id
. -
Classifica le righe per
audit_date
partizionamento 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.