Letzten Abschnitt (von zusammenhängenden)



  • Keine Ahnung, welches DBMS Du verwendest, aber ich würde wohl ungefähr sowas machen:

    select max(end_date)
      from deine_tabelle
      where (DATE '2010-01-15', DATE '2010-01-15') overlaps (start_date, end_date)
      group by id;
    


  • hm, wenn ich '2008-01-01' angebe soll es null liefern.

    und es kann auch so aussehen:

    kunden   von           bis
    1        2010-01-01    2010-01-31
    1        2010-02-01    2010-02-28
    1        2010-03-01    2010-03-31
    1        2010-05-01    2010-05-31
    

    da möchte ich dann '2010-03-31' bei angabe von '2010-01-15'

    jenz



  • Hoppla, Angabe genauer lesen hilft. 🙂
    Sorry, mein Fehler.



  • @nman:
    Das würde mir ja aber nicht das letzte zusammenhängende "bis" anzeigen.
    sondern nur das "bis" von dem einen überlappenden abschnitt, oder nicht?

    jenz



  • Wie soll der Wert 2010-03-31 ermittelt werden. Er befindet sich doch gar nicht in deinem Beipiel?



  • jenz schrieb:

    @nman:
    Das würde mir ja aber nicht das letzte zusammenhängende "bis" anzeigen.
    sondern nur das "bis" von dem einen überlappenden abschnitt, oder nicht?

    Ja, ich hatte übersehen, wie Du die Daten vorliegen hast.

    Ich würde wittes Vorschlag mit meinem kombinieren und zunächst mal sowas als View machen:

    select id, d1.start_date, max(d1.end_date)
      from dateintervaltest d1
        left join dateintervaltest d2 on (d1.id=d2.id and d2.start_date=d1.end_date+1)
      group by d1.start_date;
    

    Das spuckt Dir dann zusammenhängende lange Intervalle aus, also eben zB.

    1    2010-01-01    2010-02-28
    1    2010-04-01    2010-04-30
    

    Darauf kannst Du dann sowas anwenden:

    select end_date
      from deine_view_von_oben
      where (DATE '2010-01-15', DATE '2010-01-15') overlaps (start_date, end_date)
        and id=1;
    


  • jenz schrieb:

    und es kann auch so aussehen:

    […]
    1        2010-03-01    2010-01-31
    […]
    

    Hm? Hast Du Dich gerade vertippt, oder meinst Du, dass Start -und Anfangsdatum vertauscht sein können?



  • huch, ja vertippt, habe es korrigiert

    und bei drei (und mehr) abschnitten funktioniert die view ja wieder nicht, nicht wahr?



  • Das ist korrekt.

    Aber wenn die Line Items irgendwie in Gruppen zusammenhängen, wirst Du nicht darum herumkommen, das über kurz oder lang auch entsprechend zu modellieren.

    Das heißt, dass Du wohl irgendwelche Abfragen drüberjagen müssen wirst, die irgendwoanders Projekte anlegen und die vorliegenden Zeitabschnitte dann den Projekten zuweisen, sodass Du alle Zeitabschnitte, die zu einem Projekt gehören, leicht per Gruppierung nach Projekt erfassen kannst.



  • ja, mit vorher "drübergehen" sehe ich auch möglichkeiten.
    aber genau das wollte ich, wenn möglich vermeiden...



  • jenz schrieb:

    aber genau das wollte ich, wenn möglich vermeiden...

    Wird nicht vernünftig hinhauen. Du hast Informationen nicht mitmodelliert, die Du brauchst. Das musst Du jetzt eben korrigieren.



  • schade, aber genau deshalb frage ich ja, ob jemand noch eine andere möglichkeit sieht.
    ich sehe sie nämlich auch nicht.


Anmelden zum Antworten