Per recuperare i record tra due intervalli di dateCIAO,
Ho la seguente tabella di dati con le prime 4 colonne che sono l'input e le ultime 2 sono l'output richiesto. Ho provato a unire due tabelle per combinare la colonna 1-3 e la colonna 4 abbinando ID = ID e Adm.Date = Ref.Date. Ora voglio due colonne di output ( Amm. Data_1 e Dis_Data_1) come mostrato di seguito.Ho bisogno di Adm.Date e Dis.Date popolati per tutti i Ref.Date compresi nell'intervallo di Adm.Date e Dis.Date e valore mancante per quelli che non rientrano nell'intervallo di date. Sono stato in grado di ottenere il rispettivo Adm. Date e Dis.Date utilizzando la funzione if e lag solo per il record successivo successivo e non per tutti i record in quell'intervallo. Per favore fatemi sapere se c'è un modo per trovare una soluzione adeguata a questo problema.
Grazie in anticipo.
| ID | Amm. Data | Dis.Data | Rif. Data | Data amm._1 | Dis.Data_1 |
| 12 | 2/12/2014 | 15/12/2014 | 2/12/2014 | 2/12/2014 | 15/12/2014 |
| 12 | | | 3/12/2014 | 2/12/2014 | 15/12/2014 |
| 12 | | | 6/12/2014 | 2/12/2014 | 15/12/2014 |
| 13 | | | 1/10/2015 | | |
| 13 | 6/1/2016 | 25/1/2016 | 6/1/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 1/10/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 1/11/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 1/12/2016 | 6/1/2016 | 25/1/2016 |
Ri: Per recuperare i record tra due intervalli di dateGrazie per la soluzione. Ha funzionato perfettamente.Ri: Per recuperare i record tra due intervalli di datePuoi adattarlo abbastanza facilmente con alcuni controlli logici sull'ID:
dt = Current Data Table();
ad_date_temp = .;
dis_date_temp = .;
id_temp = :ID[1];
for(i=1,i<=N Row(dt), i++,
//Only update these vars if current row has new values for them
If(!Is Missing(:Name("Adm. Date")[i]),
//Execute if new Adm. Date
ad_date_temp = :Name("Adm. Date")[i];
dis_date_temp = :Name("Dis. Date")[i];
id_temp = :ID[i],
);
If(:Name("Ref.Date")[i] >= ad_date_temp & :Name("Ref.Date")[i] <= dis_date_temp & :ID[i] == id_temp,
//Execute if Ref Date is in the current range
:Name("Adm.Date_1")[i] = ad_date_temp;
:Name("Dis.Date_1")[i] = dis_date_temp
,
//Execute if Ref Date is not in the current range
:Name("Adm.Date_1")[i] = .;
:Name("Dis.Date_1")[i] = .
);
);Ri: Per recuperare i record tra due intervalli di dateCiao Wilden,
Grazie per la tua soluzione.
Voglio che Ref.Date sia nel rispettivo intervallo di date per quel particolare ID. Diciamo che per la riga 4 (ID 13), Ref.Date è compreso tra Adm.Date e Dis.Date dell'ID 12, quindi dovrebbe essere "." invece di assumere valori di ID 12. Idealmente, la data dovrebbe essere popolata in base all'ID e non al precedente record Adm.Date e Dis.Date disponibile. Non sono sicuro che questo script si prenderà cura di questo requisito. Apprezzo il tuo aiuto in questo. Grazie.
Rini
| ID | Amm. Data | Dis.Data | Rif. Data | Data amm._1 | Dis.Data_1 |
| 12 | 2/12/2014 | 15/12/2014 | 2/12/2014 | 2/12/2014 | 15/12/2014 |
| 12 | | | 3/12/2014 | 2/12/2014 | 15/12/2014 |
| 12 | | | 6/12/2014 | 2/12/2014 | 15/12/2014 |
| 13 | | | 13/12/2014 | | |
| 13 | | | 1/10/2015 | | |
| 13 | 6/1/2016 | 25/1/2016 | 6/1/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 1/10/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 1/11/2016 | 6/1/2016 | 25/1/2016 |
| 13 | | | 1/12/2016 | 6/1/2016 | 25/1/2016 |
Ri: Per recuperare i record tra due intervalli di dateEcco una soluzione che ha funzionato sul tuo caso di test scorrendo le righe nella tabella.Fammi sapere se hai bisogno di aiuto per capire il codice.
dt = Current Data Table();
ad_date_temp = .;
dis_date_temp = .;
for(i=1,i<=N Row(dt), i++,
//Only update these vars if current row has new values for them
ad_date_temp = If(IsMissing(:Name("Adm. Date")[i]),ad_date_temp, :Name("Adm. Date")[i]);
dis_date_temp = If(IsMissing(:Name("Dis. Date")[i]),dis_date_temp, :Name("Dis. Date")[i]);
Show(i, ad_date_temp, dis_date_temp);
If(:Name("Ref.Date")[i] >= ad_date_temp & :Name("Ref.Date")[i] <= dis_date_temp,
//Execute if Ref Date is in the current range
:Name("Adm.Date_1")[i] = ad_date_temp;
:Name("Dis.Date_1")[i] = dis_date_temp
,
//Execute if Ref Date is not in the current range
:Name("Adm.Date_1")[i] = .;
:Name("Dis.Date_1")[i] = .
);
);