-
Frage an die SQL-Profis
Hallo Gemeinde,
ich hätte da mal eine Frage, ob man folgendes Problem elegant mit einem SQL lösen kann.
Ich habe eine Tabelle mit 3 Key-Felder und ein Von- und Bis-Wert. (Die restlichen Felder des Satzes sind bei gleiche Key immer identisch, deshalb lass ich die hier mal weg)
In der Tabelle gibt es bei gleichen Key mehrer Sätze, wo ein Satz mit einem VON-Wert beginnt, der dem Satz davor dem BIS-Wert + 1 entspricht. Wenn das der Fall ist, so möchte ich aus diesen 2 (Oder auch mehr) Sätzen einen machen, wo der VON-Wert = dem VON-Wert des ersten Satzes und der BIS-Wert gleich dem BIS-Wert des letzten Satzes ist.
Ausgang:
PHP-Code:
Key1 Key2 Key3 von bis
1 1 1 10001 10005
1 1 1 10006 10010
1 1 2 10011 10015
1 1 1 10016 10020
1 1 1 10021 10030
1 1 1 10031 10057
Und so sollte das Ziel aussehen
PHP-Code:
Key1 Key2 Key3 von bis
1 1 1 10001 10010
1 1 2 10011 10015
1 1 1 10016 10057
Ist das überhaupt mit SQL möglich?
Liebe Grüße
Ronald
-
Schau dir da mal die OLAP-Funktionen an.
Hier kannst du ggf. mit Min/Max und Partition order by zum gewünschten Ergebnis auf dem Einzelsatz kommen.
Dieses gruppierst du dann wieder über die Schlüssel mit den Min/Max auf das errechnete obige Ergebnis.
-
Hallo,
so sollte es auch gehen:
PHP-Code:
with data (Key1, Key2, Key3, von, bis) as (values (1, 1, 1, 10001, 10005), (1, 1, 1, 10006, 10010), (1, 1, 2, 10011, 10015), (1, 1, 1, 10016, 10020), (1, 1, 1, 10021, 10030), (1, 1, 1, 10031, 10057) ), sort (Key1, Key2, Key3, von, bis, rn) as ( select key1, key2, key3, von, bis, row_number() over (order by key1,key2,key3) from data ), gruppen (crn, grp_Key1, grp_Key2, grp_Key3, grp_von, grp_bis, gruppe) as ( select rn, key1, key2, key3, von, bis, 1 from sort where rn = 1 union all select rn, key1, key2, key3, case when (key1, key2, key3) <> (grp_key1, grp_key2, grp_key3) then von when von > grp_bis + 1 then von else grp_von end, bis, case when (key1, key2, key3) <> (grp_key1, grp_key2, grp_key3) then gruppe + 1 when von > grp_bis + 1 then gruppe + 1 else gruppe end from gruppen inner join sort on crn + 1 = rn )
select grp_key1, grp_key2, grp_key3, min(grp_von), max(grp_bis) from gruppen group by grp_key1,grp_key2,grp_key3,gruppe order by min(grp_von)
1 1 1 10001 10010 1 1 2 10011 10015 1 1 1 10016 10057
Similar Threads
-
By croma62 in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 18-07-17, 15:37
-
By a.wojcik in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 21-01-16, 12:29
-
By jgv in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 06-11-13, 14:41
-
By Franz.Rung in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 04-11-13, 15:32
-
By hs in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 30-01-02, 11:37
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks