Announcement

Collapse
No announcement yet.

SQL - Abfrage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL - Abfrage

    Hallo zusammen,
    ich schlage mich schon ein paar Tage mit dem Problem herum:

    Ich habe eine SQlite-Tabelle, in der Zeiträume angegeben sind:

    startdate enddate
    2017-01-01 2017-06-30
    2017-07-01 2017-12-31
    2018-01-01 2018-06-30
    2018-07-01 2018-12-31
    2019-01-01 2019-06-30
    2019-07-01 2019-12-31
    2020-01-01 2020-06-30
    2020-07-01 2020-12-31
    2021-01-01 2021-06-30

    Meine Abfrage soll z.B. folgendes Ergebnis haben(siehe nachfolgendes SELECT) als Suchdatum ab::

    2018-06-15 2019-06-30
    2019-07-01 2019-12-31
    2020-01-01 2020-06-30
    2020-07-01 2020-12-31
    2021-01-01 2021-15-02

    also: das erste Datum liegt im freigewählten Zeitraum ( als Suchdatum ) und das letzte Datum geht bis
    jetzt = 'now'(hier: 2021-15-02).

    Wie löse ich die SQL abfrage ?
    ich habe es versucht mit:
    SELECT startdate, enddate FROM tabelle WHERE CASE WHEN startdate >= '2018-06-15'
    und mit
    SELECT startdate, enddate FROM tabelle WHERE CASE WHEN startdate >= date('now','start of year') AND enddate <'now' THEN 1 ELSE 0 END

    dann bekomme ich.
    2018-07-01 2018-12-31
    2019-01-01 2019-06-30
    2020-07-01 2020-12-31
    2021-01-01 2021-06-30
    2021-01-01 2021-15-02

    Das zweite SELECT habe ich in einer zweiten Cursor Schleife laufen, deshalb bekomme ich auch
    2021-01-01 2021-06-30
    zurück. Wie bekomme ich die Zeiträume ohne den letzten Zeitraum zurück, sondern nur den Zeitraum vom letzten Jahreswechsel bis jetzt?
    Das gleiche Problem habe ich auch am Anfang mit dem frei gewählten Datum.
    Geht das überhaupt über ein reines SQL-Statement? Oder brauche ich 3 Schleifen, - dann habe ich das Problem,
    wie kann ich aus dem Jahr das höchste Datum auswählen(der Zeitraum hat ja immer zwei Zeitpunkte). Wie kann ich das bewerkstelligen ?
    Mit <= oder >= Versuchen komme ich auch nicht weiter.

    Kann mir jemand einen Lösungshinweis geben ?
    Danke !

  • #2
    Toller aussagekräftiger Titel

    Das maximale Datum je Jahr sollte sich aus einem max(datum) und einem group über das Jahr ergeben

    select max(startdate) from tabelle group by strftime('%Y,startdate);

    https://sqlite.org/lang_datefunc.html
    Christian

    Comment


    • #3
      Die Antwort löst das Problem nicht !

      Nicht einmal den Ansatz der Problem-Lösung kann ich Deiner Antwort entnehmen.

      Ich habe bewusst das gewünschte Ergebnis hingeschrieben(siehe oben:'meine Abfrage soll z.B. folgendes Ergebnis haben')
      Das mit dem Max(startdate) ist doch nur eins bei dem dreiteiligen Problem.
      Es geht darum, eine Zeitreihe, wie oben gewünscht zurückzubekommen, weil mit dem jeweiligen Zeitraum weitergerechnet werden soll( zB Tage * Preis etc.).
      Ich weiß nicht was das Group soll ?

      Kann ein SQL-Experte helfen ?

      Comment


      • #4
        Sicherlich löst die Antwort das Problem.
        Es sollte mit Eigeninitiative möglich sein, diese auf eine weitere column zu erweitern, sowie um eine where-Bedingung
        Christian

        Comment


        • #5
          Was ich bis her verstanden habe.

          http://sqlfiddle.com/#!7/a9369c/15

          Comment


          • #6
            Hallo
            vielen Dank !
            Meine Abfrage funktioniert jetzt so:

            SELECT startdate, min(enddate, date('now')) enddate FROM tabelle WHERE startdate >='2018-06-15'

            Die Abfrage liefert den nächstgrößeren Zeitwert:2018-07-01

            Und wie füge ich den Beginnzeitpunkt '2018-06-15'so ein, dass die Abfrage vom '2018-06-15' bis now läuft, also 15 Tage bis
            zum nächsten Zeitraum '2018-07-01'. Das ist das letzte Eck

            Comment


            • #7
              Noch zur Klarstellung:
              das gesuchte Beginndatum gebe ich via Suchfeld ein;
              es sollen eben die Zeiträume, wenn ich den '2018-06-15' eingebe,
              '2018-06-15' - '2018-06-30'
              '2018-01-01' - '2018-06-30'
              bis jetzt ausgegeben werden.

              Ich habe mit heute eimem SELECT....WHERE startdatum <= endatum und mit 'UNION' versucht den Beginnzeitraum anzufügen,
              komme damit aber auch auf keinen grünen Zweig.
              Vielleicht gibts doch eine Lösung
              VG

              Comment


              • #8
                Wenn ich dich jetzt richtig verstehe solltest du einfach in dem verlinkten SqlFiddle den zweimal auftauchenden
                Code:
                date('now','start of year')
                Code durch dein Beginndatum ersetzen können.
                Im SqlFiddle bin ich davon ausgegangen das du das vom Anfang des aktuellen Jahres wolltest. Aber so wie es da gelöst ist sollte es auch mit jedem anderen Datum funktionieren.
                Zuletzt editiert von Ralf Jansen; 16.02.2021, 20:12.

                Comment


                • #9
                  Danke !!
                  jetzt habe ich's 'gefressen'
                  VG
                  Luko

                  Comment

                  Working...
                  X