Ich habe unten mit mir Datensatz. Ich möchte sicherstellen, dass für eine bestimmte ID start_date, end_date und der Zeitraum dazwischen diese beiden Daten nicht mit Daten einer anderen ID überlappen.Teradata ROWS UNBOUNDED PRECEDING
ID Start_Date End_Date
101 01-01-2001 31-01-2001
102 01-02-2001 28-02-2001
103 26-02-2001 31-03-2016
104 15-03-2001 30-04-2001
105 01-05-2002 31-05-2002
106 05-12-2002 31-12-2002
107 15-12-2002 05-01-2003
Um dies zu tun, ich unten Abfrage erstellt:
select id,start_date,end_date,
case
when
end_date < max(end_date) over(order by start_date rows unbounded preceding)
then 'overlapping'
when
start_date < max(end_date) over(order by start_date rows unbounded preceding)
then 'overlapping'
else 'non-overlapping'
end as FLAG from table
ich unten Ausgang bin immer alle Flaggen mit als ‚Überlappung‘, die nicht korrekt ist. Ich denke, ‚Zeilen unbegrenzt vorhergehenden‘ wird aktuelle Zeile auch bei der Berechnung unter: Können Sie bitte lassen Sie mich wissen, wo ich falsch bin:
ID Start_Date End_Date Flag
101 01-01-2001 31-01-2001 Overlapping
102 01-02-2001 28-02-2001 Overlapping
103 26-02-2001 31-03-2016 Overlapping
104 15-03-2001 30-04-2001 Overlapping
105 01-05-2002 31-05-2002 Overlapping
106 05-12-2002 31-12-2002 Overlapping
107 15-12-2002 05-01-2003 Overlapping
Natürlich 'Reihen unbegrenzt preceding' enthält die aktuelle Zeile, es ist eine Abkürzung für 'Zeilen zwischen unbeschränkter vorhergehender und aktueller Zeile'. Können Sie zeigen, welches genaue Ergebnis zurückgegeben werden soll? – dnoeth
bist du sicher ID103 geht bis 2016 und nicht 2001? – Beth