|
|
|
|
Strumenti |
29-12-2020, 16:07 | #1 |
Senior Member
Iscritto dal: Mar 2004
Città: RoMaNoVeNeTo
Messaggi: 756
|
[SQL SERVER] Storicizzazione Attributi record e ricostruzione storia
Ciao a tutti e auguri. Ma tanto siamo sempre al chiodo. questo il problema.
NB sqlserver 15, quindi tutto a disposizione (UNPIVOT, CROSS APPLY ecc.) ho una tabella che chiamiamo Giocatori (id, Nome). 1, Messi 2, Ronaldo poi tante tabelle (almeno 6), che mi portano degli attributi, e validità temporale, tipo tabStipendi (idGiocatore, DataInizio,DataFine, StipendioEuro) 1, 01/01/2020, 28/02/2020, 10000 1, 28/02/2020, 31/03/2020, 10050 1, 01/04/2020, 01/01/2099, 11000 2, 01/01/2020, 04/07/2020, 20000 2, 05/07/2020, 01/09/2020, 20500 2, 02/09/2020, 01/01/2099, 20700 tabSquadra (idGiocatore, DataInizio, DataFine, Squadra) 1, 01/01/2020, 24/02/2020, Inter 1, 25/02/2020, 31/03/2020, Roma 1, 01/04/2020, 01/01/2099, Juve 2, 01/01/2020, 04/07/2020, Barcellona 2, 05/07/2020, 01/10/2020, Juve 2, 02/10/2020, 01/01/2099, Barcellona e via cosi. In queste tabelle, tutte di struttura identica, non ho mai record null, c'è sempre almeno un record della tabella giocatori, e non ci sono - per ogni tabella- periodo sovrapposti. Risultato che vorrei (dovrei.. ed entro il 7 gennaio ) è ricostruire i record in questo modo GiocatoriStorico (id,Messi, DataInizio, DataFIne, Squadra, Stipendio) 1, Messi ,01/01/2020 ,24/02/2020, Inter, 10000 1, Messi, 25/02/2020, 28/02/2020, Roma,10000 1, Messi, 01/03/2020, 31/03/2020, Roma, 10050 1, Messi, 01/04/2020, 01/01/2020, Juve, 11000 2, Ronaldo 01/01/2020,04/07/2020, Barcellona, 20000 2, Ronaldo 05/07/2020, 01/09/2020, Juve, 20500 2, Ronaldo 02/09/2020,01/10/2020, Juve, 20700 2, Ronaldo, 02/10/2020,01/01/2099, Barcellona, 20700 nelle tabelle degli attributi non ho mai record a null e sovrapposti tra di loro. si tratta di fare le intersezioni di ogni periodo.. ho provato con union, full join, ma in realtà sto andando assolutamente a caso. Credo sia un problema relativamente semplice che avrete già risolto in tutti i DWH del mondo... io mi sono incartato in maniera mostruosa. grazie dell'aiuto
__________________
Acer m5500 (Q6600,4MB) Sapphire Ati 3850, Logitech Performance MX, Tastiera Logitech G15, Epson bx 310 FN, QNAP 419p+, WDTVLIVE, Harmony One |
30-12-2020, 11:06 | #2 |
Senior Member
Iscritto dal: Apr 2005
Messaggi: 2992
|
Se puoi modificare la struttura delle tabelle, io semplificherei aggiungendo il campo "StipendioEuro" nella tabSquadra.
Così puoi anche eliminare la tabStipendi e diventa tutto più semplice da gestire Se invece non puoi, la cosa è un pelo più complicata (o almeno così la vedo io) poichè devi scrivere una funzione per cui devi vedere se il record della tabella principale da cui vuoi partire E' oppure NON E' all'interno del range di date. E anche lì con le date dipende da come vuoi gestire... Se invece le date sai che coincidono sempre (datainizio e datafine coincideranno sempre) allora ti basta una semplice join dove nella where metti che tabSquadra.DataInizio = tabStipendi.DataInizio AND tabSquadra.DataFine = tabStipendi.DataFine) |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:23.