LEAD
Descrizione
LEAD
è una funzione di aggregazione della finestra che suddivide le righe in gruppi, le ordina in base a un campo e restituisce il valore di un campo nella riga in corrispondenza dello scostamento specificato dopo (sotto) la riga corrente nel gruppo.Il
PARTITION BY
La clausola determina i campi da utilizzare per suddividere un insieme di righe di input in gruppi. Il ORDER BY
La clausola determina come ordinare le righe nella partizione.Il sistema separa le righe di input in gruppi in base ai campi di partizionamento, ordina le righe in base ai campi di ordinamento e quindi calcola l'espressione aggregata (lead per questa funzione) in ogni gruppo.
Sintassi
LEAD(input_field,offset,default_value)OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
Valore restituito
Restituisce un valore per ogni riga dello stesso tipo di
input_field
.Parametri di input
- input_field
- Sono obbligatori. Campo in cui eseguire la funzione di aggregazione. È possibile specificare qualsiasi tipo di campo.
- offset
- Facoltativo. Il numero di righe dopo la riga corrente di cui restituire il valore. Deve essere un numero letterale maggiore o uguale a zero (0) e minore o uguale a 100. Se non si specifica la compensazione, il sistema utilizza il valore 1.
- default_value
- Facoltativo. Il valore restituito da questa funzione quando la riga di offset non rientra nella finestra correntemente definita o quando il valore nella riga di offset è NULL.default_valuedeve essere dello stesso tipo diinput_field. Se non si specifica un valore predefinito, il sistema utilizza il valore NULL.
- OVER()
- ObbligatorioOVERdeve essere utilizzato all'interno di aLEADespressione
- PARTITION BYpartitioning_field
- Sono obbligatori. Utilizzare ilPARTITION BYper specificare uno o più campi da utilizzare per partizionare un gruppo di righe di input. È possibile specificare qualsiasi tipo di campo tranne Valuta. Esempio: si specifica il campo Mese come campo di partizionamento, in modo che il sistema raggruppa in un'unica partizione tutti i record che hanno lo stesso valore per il mese.
- ORDER BYordering_field
- Sono obbligatori. Utilizzare ilORDER BYper specificare come ordinare le righe di input nella partizione utilizzando i valori nel campo specificato all'interno di ogni partizione. È possibile specificare qualsiasi tipo di campo tranne Valuta.È possibile utilizzareDESCoASCper ordinare le parole chiave in ordine decrescente (valori da decrescente, valori NULL ultimi) o crescente (valori decrescenti, valori NULL primi) per ogni campo di ordinamento. Se non si specifica un ordinamento per un campo di ordinamento, il sistema ordina automaticamente le righe in ordine crescente.
Esempi
Esempio: si dispone di un set di dati con queste righe e questi campi.
row_ID | Employee_Name | Eff_Date | Stipendi |
|---|---|---|---|
1 | Ehi | 1/1/18 | 49000 |
2 | Ehi | 1/1/19 | 56000 |
3 | Ehi | 01/01/2017 | 44000 |
4 | Freeman | 1/1/18 | 65000 |
5 | Freeman | 01/01/2017 | 57000 |
6 | Freeman | 1/1/19 | 69000 |
7 | Smith | 1/1/18 | 51000 |
8 | Smith | 1/1/19 | 56000 |
9 | Smith | 1/1/16 | 44000 |
È possibile ordinare le righe per ogni dipendente in ordine decrescente (
DESC
) in base al campo della decorrenza (Eff_Date
), in modo che lo stipendio più recente venga prima in ogni partizione.Utilizzare questa espressione nel campo
Salary_Increase
per calcolare la variazione dello stipendio tra ogni modifica della decorrenza:[Salary] - (LEAD([Salary], 1, [Salary]) OVER( PARTITION BY [Employee_Name] ORDER BY [Eff_Date] DESC) )
Si ottengono i seguenti risultati:
row_ID | Employee_Name | Eff_Date | Stipendi | Salary_Increase |
|---|---|---|---|---|
2 | Ehi | 1/1/19 | 56000 | 7000 |
1 | Ehi | 1/1/18 | 49000 | 5.000 |
3 | Ehi | 01/01/2017 | 44000 | 0 |
6 | Freeman | 1/1/19 | 69000 | 4.000 |
4 | Freeman | 1/1/18 | 65000 | 8000 |
5 | Freeman | 01/01/2017 | 57000 | 0 |
8 | Smith | 1/1/19 | 56000 | 5.000 |
7 | Smith | 1/1/18 | 51000 | 7000 |
9 | Smith | 1/1/16 | 44000 | 0 |