Ist das mit PL/SQL Developer, bzw Oracle möglich?

Nanex

Neuer Benutzer
Beiträge
2
Hey Leute,

ich bin, was Oracle angeht, noch sehr unerfahren, habe aber Grundkenntnisse in MySQL. Also einfache Datenbankabfragen, addition, Subselects usw. sind kein problem, aber hier habe ich echte Schwierigkeiten.

Ich habe eine Datenbank, die ungefähr aussieht wie folgt:

Paket ID....Orts ID.... Action....Zeitstempel
....1................A...........Req.........yyyy/mm/dd
....4...............C...........Arrived....yyyy/mm/dd

usw.
Die Paket ID ist einmalig und es wird also in den unterschiedlichen Einträgen immer festgehalten, welches Paket, gerade wo ist und ob es angekommen ist, von da aus angefordert wird, gerade weg gesendet wird usw. (Interessant ist aber nur, wann es los geschickt wurde und wann es angekommen ist), dazu immer der zugehörige Zeitstempel.
Es ist aus den einzelnen Einträgen nicht ersichtlich, von wo das Paket kam, oder wo das Paket hingeht.
Dies erfährt man nur, wenn man die unterschiedlichen Zeitstempel betrachtet in Verbindung mit der einen spezifischen Paketnummer, sodass man sieht wann der nächste Eintrag mit der gleichen Paket Nummer auftauchte.

Am Ende soll mittels SQL befehlen eine Tabelle raus kommen, aus der ersichtlich ist, wie oft ein Paket von Punkt A nach Punkt C oder von A nach D usw gefahren ist. Also nicht speziell auf ein Paket bezogen, sondern nur, wie oft welcher Weg gefahren wurde.

Das sollte dann ungefähr so aussehen.

Movements....O1....O2....O3....O4....
I1.....................x.......y....... ......z......
I2.................... .......d........f........a......
....

Mit insgesamt rund 25x25 Einträgen.

Ist so etwas überhaupt möglich mit SQL oder eher nicht?

Mein Ansatz war jetzt, über den COUNT Befehl erstmal herauszufinden, wie oft welcher input oder output überhaupt angefahren wurde, das funktioniert auch schon in der Art, dass ich zwei Tabellen ausgeworfen bekomme. Eine mit den Inputs und eine mit den Outputs.
Jedoch habe ich noch nicht herausgefunden, wie ich dann diese beiden Tabellen zu einer großen Tabelle verbinden kann, aus der dann auch ersichtlich wird, wie oft eben die unterschiedlichen Wege abgefahren wurden.

Kann mir hierbei einer helfen?
 
Werbung:
Ist die Paket-ID wirklich eindeutig, oder kann diese 2-mal vorkommen, einmal mit Action = 'req' und einmal mit Action = 'Arrived'? Das ist nicht ganz klar / eindeutig.
Kannst Du den Satz "Dies erfährt man nur, wenn man die unterschiedlichen Zeitstempel betrachtet in Verbindung mit der einen spezifischen Paketnummer, sodass man sieht wann der nächste Eintrag mit der gleichen Paket Nummer auftauchte." näher erklären? Ich versteh leider nur Bahnhof.

Und: kannst Du erklären, wie man von Deiner ersten gezeigten Tabelle mit (1,A),(4,C) auf das Resultat mit (x,y,z),(d,f,a) kommen soll?

Generell: nachvollziehbare Beispiele können massiv helfen DIR zu helfen.

Als ersten Versuch, Dich zu verstehen, kam dies bei raus:

Code:
test=*# select * from nanex ;
 p_id | orts_id | action |  ts   
------+---------+--------+---------------------
  1 | a  | r  | 2018-01-01 00:00:00
  1 | c  | a  | 2018-01-02 00:00:00
  2 | x  | r  | 2018-01-10 00:00:00
  2 | y  | a  | 2018-01-12 00:00:00
(4 Zeilen)

test=*# select p_id, string_agg(orts_id,',') filter (where action = 'r') as start, string_agg(orts_id,',') filter (where action = 'a') as ziel from nanex group by p_id;
 p_id | start | ziel
------+-------+------
  1 | a  | c
  2 | x  | y
(2 Zeilen)

test=*#

Aber vermutlich hilft das nicht viel. Also Dir nicht. Weil nicht klar ist, was Du hast und was Du suchst.
 
Danke dir für die schnelle Antwort!

Die Paket ID ist insofern einzigartig, dass sie pro Paket nur einmal vorkommt.
In der Datenbank kommt sie sogar mehrmals vor, also wenn das Paket angefordert wird, freigegeben wurde, am weg ist oder angekommen ist zum Beispiel. Es sind nur die Einträge wenn es angefordert wird und angekommen interessant, was ja leicht zu filtern ist. Anzeigen lasse ich mir also nur noch die Zeilen in denen requested und arrived vorkommt.

Wenn das Paket von Punkt A nach Punkt Z gehen soll, dabei aber die punkte D E F G H durchläuft, wird bei jedem Punkt "Requested" und "arrived" angezeigt.
Das heißt, wenn arrived in der Datenbank steht, bedeutet es noch nicht, dass das Paket wirklich am endgültigen ziel ankam, sondern nur, dass es am nächst geplanten Zielpunkt angekommen ist.
Somit kommt die Paketnummer insgesamt x-male vor.

Mit dem Satz wollte ich sagen:
Herausfinden, dass bspw. Paket 1 den Weg von Punkt A nach Punkt B gefahren ist, kann man nur, indem man ausgehend von dem Eintrag mit dem letzten Requested, in Verbindung mit einem bestimmten Zeitstempel und Paketnummer 1, sucht, bei welchem darauffolgenden Zeitstempel unter dieser Paketnummer Arrived vorkommt.
Das muss man dann für alle Paketnummern machen, sodass man herausfinden kann, welcher Weg wie oft abgefahren wurde.
Habe ich hierbei schon einen Denkfehler oder soweit noch alles richtig?

Der Ansatz den du hier schon hast, geht fast in die richtige Richtung, danke!
Ich will quasi in der ersten Spalte alle inputs haben
und in der ersten Zeile alle outputs, sodass dann eine ca 25x25 matrix draus wird.
und die eintrage sollen dann nicht die Paketnummern sein, sondern die Anzahl der Wege.

sodass man beispielsweise bei (I3,O11)=2345 movements hat.


xyz, dfa sind in meinem Beispiel zahlenvariablen, die die Anzahl der movements ausgeben sollen.

Und die Orts ID's in meiner ersten Tabelle entsprechen den (I1,I2,I3...O1,O2,O3...) in der zweiten Tabelle, sehr unglücklich von mir formuliert, Entschuldigung dafür.
 
Werbung:
kannst Du mal eine Beispieltabelle zeigen, am besten gleich mit create table un dinsert-Befehlen zum nachvollziehen, und was rauskommen soll.
 
Zurück
Oben