Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Gruppierung aufeinander folgende Werte

Dieses Thema im Forum "Oracle" wurde erstellt von Tomacco81, 1 März 2017.

  1. Tomacco81

    Tomacco81 Neuer Benutzer

    Hallo zusammen,

    ich habe momentan ein etwas kniffliges SQL-Problem und wollte hier mal nachfragen, ob jemand spontan eine Lösung dazu einfällt.

    Mir liegt folgende Tabelle, sortiert nach Produktionszeiten vor, bei der ich zeitlich aufeinander folgende Artikel mit einem Zähler in Gruppen zusammenfassen sollte:

    Code:
    ARTIKEL		BEGINN
    --------	-------------------
    Artikel1	01.03.2017 06:00:00
    Artikel1	01.03.2017 08:00:00
    Artikel1	01.03.2017 10:00:00
    Artikel2	01.03.2017 12:00:00
    Artikel2	01.03.2017 14:00:00
    Artikel2	01.03.2017 16:00:00
    Artikel1	01.03.2017 18:00:00
    Artikel1	02.03.2017 06:00:00
    Artikel1	02.03.2017 08:00:00
    Artikel3	02.03.2017 10:00:00
    Artikel3	02.03.2017 12:00:00
    Artikel3	02.03.2017 14:00:00 
    
    Das Ergebnis stelle ich mir wie folgt vor:

    Code:
    ARTIKEL		BEGINN              GRUPPE
    --------	------------------- ------
    Artikel1	01.03.2017 06:00:00      1
    Artikel1	01.03.2017 08:00:00      1
    Artikel1	01.03.2017 10:00:00      1
    Artikel2	01.03.2017 12:00:00      2
    Artikel2	01.03.2017 14:00:00      2
    Artikel2	01.03.2017 16:00:00      2
    Artikel1	01.03.2017 18:00:00      3
    Artikel1	02.03.2017 06:00:00      3
    Artikel1	02.03.2017 08:00:00      3
    Artikel3	02.03.2017 10:00:00      4
    Artikel3	02.03.2017 12:00:00      4
    Artikel3	02.03.2017 14:00:00      4
    
    Problematisch ist, dass ich in diesem Beispiel zwei Gruppen mit "Artikel1" habe und ich diese nicht zusammenfassen darf.
    Gibt es bei Oracle die Möglichkeit, dies irgendwie zu realisieren?

    Dankeschön und viele Grüße :)
     
  2. akretschmer

    akretschmer Datenbank-Guru

    PostgreSQL, kann Ora möglichrweise auch so:

    Code:
    test=*# select * from tomacco81 ;
     artikel  |  beginn   
    ----------+---------------------
     Artikel1 | 2017-03-01 06:00:00
     Artikel1 | 2017-03-01 08:00:00
     Artikel1 | 2017-03-01 10:00:00
     Artikel2 | 2017-03-01 12:00:00
     Artikel2 | 2017-03-01 14:00:00
     Artikel2 | 2017-03-01 16:00:00
     Artikel1 | 2017-03-01 18:00:00
     Artikel1 | 2017-03-02 06:00:00
     Artikel1 | 2017-03-02 08:00:00
     Artikel3 | 2017-03-02 10:00:00
     Artikel3 | 2017-03-02 12:00:00
     Artikel3 | 2017-03-02 14:00:00
    (12 rows)
    
    test=*# select artikel, beginn, 1+sum(g) over (order by beginn) from (select *, case when artikel=coalesce(lag(artikel) over (order by beginn),artikel) then 0 else 1 end as g from tomacco81 ) foo;
     artikel  |  beginn  | ?column?
    ----------+---------------------+----------
     Artikel1 | 2017-03-01 06:00:00 |  1
     Artikel1 | 2017-03-01 08:00:00 |  1
     Artikel1 | 2017-03-01 10:00:00 |  1
     Artikel2 | 2017-03-01 12:00:00 |  2
     Artikel2 | 2017-03-01 14:00:00 |  2
     Artikel2 | 2017-03-01 16:00:00 |  2
     Artikel1 | 2017-03-01 18:00:00 |  3
     Artikel1 | 2017-03-02 06:00:00 |  3
     Artikel1 | 2017-03-02 08:00:00 |  3
     Artikel3 | 2017-03-02 10:00:00 |  4
     Artikel3 | 2017-03-02 12:00:00 |  4
     Artikel3 | 2017-03-02 14:00:00 |  4
    (12 rows)
    
    test=*#
    
    Grüße aus Herford.
     
    Tomacco81 gefällt das.
  3. Tomacco81

    Tomacco81 Neuer Benutzer

    Super, hat geklappt!
    Vielen Dank !!!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden