Zum Abrufen von Datensätzen zwischen zwei DatumsbereichenHallo,
Ich habe die folgende Datentabelle, wobei die ersten 4 Spalten die Eingabe und die letzten 2 die erforderliche Ausgabe sind. Ich habe versucht, zwei Tabellen zu verbinden, um Spalte 1-3 und Spalte 4 zu kombinieren, indem ich ID = ID und Adm.Date = Ref.Date abgleichte. Jetzt möchte ich zwei Ausgabespalten ( Adm. Datum_1 und Dis_Datum_1) Wie nachfolgend dargestellt.Ich brauche Adm.Date und Dis.Date, die für alle Ref.Date zwischen dem Bereich von ausgefüllt sind Adm.Date und Dis.Date und fehlender Wert für diejenigen, die nicht in den Datumsbereich passen. Ich konnte entsprechende Adm bekommen. Date und Dis.Date mit If- und Lag-Funktion nur für den nächsten folgenden Datensatz und nicht für alle Datensätze in diesem Bereich. Bitte teilen Sie mir mit, ob es eine Möglichkeit gibt, eine geeignete Lösung für dieses Problem zu finden.
Vielen Dank im Voraus.
| AUSWEIS | Adm. Datum | Dis.Datum | Ref.Datum | Adm.Datum_1 | Dis.Datum_1 |
| 12 | 12.02.2014 | 15.12.2014 | 12.02.2014 | 12.02.2014 | 15.12.2014 |
| 12 | | | 12.03.2014 | 12.02.2014 | 15.12.2014 |
| 12 | | | 12.06.2014 | 12.02.2014 | 15.12.2014 |
| 13 | | | 1.10.2015 | | |
| 13 | 01.06.2016 | 25.1.2016 | 01.06.2016 | 01.06.2016 | 25.1.2016 |
| 13 | | | 1.10.2016 | 01.06.2016 | 25.1.2016 |
| 13 | | | 1.11.2016 | 01.06.2016 | 25.1.2016 |
| 13 | | | 1.12.2016 | 01.06.2016 | 25.1.2016 |
Betreff: Abrufen von Datensätzen zwischen zwei DatumsbereichenVielen Dank für die Lösung. Es funktionierte perfekt.Betreff: Abrufen von Datensätzen zwischen zwei DatumsbereichenSie können das ziemlich einfach mit einigen logischen Überprüfungen der ID unterbringen:
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] = .
);
);Betreff: Abrufen von Datensätzen zwischen zwei DatumsbereichenHallo Wilden,
Vielen Dank für Ihre Lösung.
Ich möchte, dass das Ref.Date im jeweiligen Datumsbereich für diese bestimmte ID liegt. Sagen wir für Zeile 4 (ID 13), Ref.Date liegt zwischen Adm.Date und Dis.Date von ID 12, also sollte es "." anstatt Werte von ID 12 zu übernehmen. Idealerweise sollte das Datum basierend auf der ID und nicht auf dem vorherigen verfügbaren Adm.Date- und Dis.Date-Datensatz ausgefüllt werden. Ich bin mir nicht sicher, ob dieses Skript diese Anforderung erfüllt. Schätzen Sie Ihre Hilfe dabei. Danke.
Rini
| AUSWEIS | Adm. Datum | Dis.Datum | Ref.Datum | Adm.Datum_1 | Dis.Datum_1 |
| 12 | 12.02.2014 | 15.12.2014 | 12.02.2014 | 12.02.2014 | 15.12.2014 |
| 12 | | | 12.03.2014 | 12.02.2014 | 15.12.2014 |
| 12 | | | 12.06.2014 | 12.02.2014 | 15.12.2014 |
| 13 | | | 13.12.2014 | | |
| 13 | | | 1.10.2015 | | |
| 13 | 01.06.2016 | 25.1.2016 | 01.06.2016 | 01.06.2016 | 25.1.2016 |
| 13 | | | 1.10.2016 | 01.06.2016 | 25.1.2016 |
| 13 | | | 1.11.2016 | 01.06.2016 | 25.1.2016 |
| 13 | | | 1.12.2016 | 01.06.2016 | 25.1.2016 |
Betreff: Abrufen von Datensätzen zwischen zwei DatumsbereichenHier ist eine Lösung, die bei Ihrem Testfall funktioniert hat, indem Sie die Zeilen in der Tabelle durchlaufen.Lassen Sie mich wissen, wenn Sie Hilfe beim Verständnis des Codes benötigen.
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] = .
);
);