Gruppierung aufeinander folgende Werte

Tomacco81

Neuer Benutzer
Beiträge
2
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 :)
 
Werbung:
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.
 
Werbung:
Zurück
Oben