Ankündigung

Einklappen
Keine Ankündigung bisher.

Aufeinanderfolgende Einträge gruppieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Aufeinanderfolgende Einträge gruppieren

    Also in einer Tabelle stehen die einzelnen Checks, von Domains die geprüft wurden, für die Ausgabe sollen nun die aufeinanderfolgenden Einträge von der gleichen Domain und Status gruppiert werden, um zu sehen in welchen Zeitraum der jeweilige Status bestanden hat. Leider habe ich aktuell noch nicht einmal einen Ansatz, wie ich dies umsetzen könnte.

    Beispiel für die Prüfungen:

    Code:
    domain              status    datum   
    a.example.com success 2019-10-26
    a.example.com success 2019-10-25
    b.example.com success 2019-10-25
    b.example.com success 2019-10-24
    a.example.com success 2019-10-24
    a.example.com failure 2019-10-23
    a.example.com success 2019-10-22
    Beispiel für das gewünschte Ergebnis:

    Code:
    domain        status  until      from
    a.example.com success 2019-10-26 2019-10-24
    b.example.com success 2019-10-25 2019-10-24
    a.example.com failure 2019-10-23 2019-10-23
    a.example.com success 2019-10-22 2019-10-22

  • #2
    Bitte sehr:
    Code:
    SELECT `domain` , `status` , min( `datum` ) AS 'from', max( `datum` ) AS 'until'
    FROM `myTable`
    GROUP BY `domain` , `status`
    ORDER BY 'from'

    Kommentar


    • #3
      Ein "Group By" würde ja alle Einträge anhand von domain und status gruppieren und nicht nur die Einträge die zeitlich nacheinander vorkommen.

      Kommentar


      • #4
        Oh sorry.

        Kommentar


        • #5
          Zitat von Blar Beitrag anzeigen
          Also in einer Tabelle stehen die einzelnen Checks, von Domains die geprüft wurden, für die Ausgabe sollen nun die aufeinanderfolgenden Einträge von der gleichen Domain und Status gruppiert werden, um zu sehen in welchen Zeitraum der jeweilige Status bestanden hat. Leider habe ich aktuell noch nicht einmal einen Ansatz, wie ich dies umsetzen könnte.
          Window-Funktionen sind Deine Freunde.
          PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

          Kommentar


          • #6
            hab mal mit Hilfe von https://jaxenter.de/10-sql-tricks-39974 und PostgreSQL eine Lösung gebaut, allerdings nur für die Zeiträume, wo status = success bzw. TRUE war. Dafür liefert es noch die Anzahl der Tage

            Code:
            test=*# create or replace function f_blar(out domain_name text, out start date,out ende date,out anzahl int) returns setof record as $$ declare r record; begin for r in select distinct blar.domain from blar loop return query with dates as (select distinct datum from blar where status and domain = r.domain), grp as (select datum, datum - (row_number() over (order by datum)) * '1day'::interval as grp from dates) select r.domain, min(datum), max(datum), max(datum)-min(datum)+1 as length from grp group by grp order by length; end loop; end;$$ language plpgsql;
            CREATE FUNCTION
            test=*#
            test=*# select * from blar order by domain, datum;
             domain | status |   datum    
            --------+--------+------------
             a      | t      | 2019-10-22
             a      | f      | 2019-10-23
             a      | t      | 2019-10-24
             a      | t      | 2019-10-25
             a      | t      | 2019-10-26
             b      | t      | 2019-10-24
             b      | t      | 2019-10-25
            (7 rows)
            
            test=*# select * from f_blar();
             domain_name |   start    |    ende    | anzahl
            -------------+------------+------------+--------
             a           | 2019-10-22 | 2019-10-22 |      1
             a           | 2019-10-24 | 2019-10-26 |      3
             b           | 2019-10-24 | 2019-10-25 |      2
            (3 rows)
            
            test=*#
            Verschönerung des Codes der Funktion überlasse ich Dir zur Übung.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar

            Lädt...
            X