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 darstellen. 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 abgeglichen habe. Jetzt möchte ich zwei Ausgabespalten ( Adm. Date_1 und Dis_Date_1) Wie nachfolgend dargestellt.Ich muss Adm.Date und Dis.Date für alle Ref.Date zwischen den Bereichen ausfüllen Adm.Date und Dis.Date sowie fehlende Werte für diejenigen, die nicht in den Datumsbereich passen. Ich konnte den entsprechenden Adm erhalten. Datum und Dis.Datum verwenden die If- und Lag-Funktion nur für den nächsten folgenden Datensatz und nicht für alle Datensätze in diesem Bereich. Bitte lassen Sie mich wissen, ob es eine Möglichkeit gibt, eine geeignete Lösung für dieses Problem zu finden.
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.01.2016 | 01.06.2016 | 01.06.2016 | 25.01.2016 |
| 13 | | | 1.10.2016 | 01.06.2016 | 25.01.2016 |
| 13 | | | 1.11.2016 | 01.06.2016 | 25.01.2016 |
| 13 | | | 1.12.2016 | 01.06.2016 | 25.01.2016 |
Betreff: So rufen Sie Datensätze zwischen zwei Datumsbereichen abVielen Dank für die Lösung. Es hat perfekt funktioniert.Betreff: So rufen Sie Datensätze zwischen zwei Datumsbereichen abMit einigen logischen Überprüfungen des Ausweises können Sie dem ganz einfach Rechnung tragen:
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: So rufen Sie Datensätze zwischen zwei Datumsbereichen abHallo Wilden,
Vielen Dank für Ihre Lösung.
Ich möchte, dass das Referenzdatum im entsprechenden Datumsbereich für diese bestimmte ID liegt. Nehmen wir an, für Zeile 4 (ID 13) liegt Ref.Date zwischen Adm.Date und Dis.Date von ID 12, also sollte es „.“ sein. anstatt Werte von ID 12 zu übernehmen. Idealerweise sollte das Datum auf der Grundlage der ID und nicht auf der Grundlage der vorherigen verfügbaren Adm.Date- und Dis.Date-Datensätze ausgefüllt werden. Ich bin nicht sicher, ob dieses Skript dieser Anforderung gerecht wird. Vielen Dank für 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.01.2016 | 01.06.2016 | 01.06.2016 | 25.01.2016 |
| 13 | | | 1.10.2016 | 01.06.2016 | 25.01.2016 |
| 13 | | | 1.11.2016 | 01.06.2016 | 25.01.2016 |
| 13 | | | 1.12.2016 | 01.06.2016 | 25.01.2016 |
Betreff: So rufen Sie Datensätze zwischen zwei Datumsbereichen abHier ist eine Lösung, die bei Ihrem Testfall durch Durchlaufen der Zeilen in der Tabelle funktioniert hat.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] = .
);
);